2014-11-04 51 views
1

我的DataGridView绑定到BindingSource,它再次具有DataSet作为其DataSource。除其他外,DataSet中的相应TableAdapter具有从Access数据库提供数据的Fill方法。我填补我DataGridView数据如下图所示:DataGridView在更新后显示第一行中的一些空单元格

myTableAdapter.Fill(myDataSet.MyDataTable); 

所有这一切工作正常,并符合市场预期。当我使用UpdateQuery(也可以正常工作)更改我的数据,然后再次单击我的DataGridView中的任意行时,出现问题 - 只要我点击,(总是)第一行的最后两个单元格为显示为空。无论我点击哪一行,始终是第一行中的单元格,并且仅在执行UpdateQuery之后。

当我直接检查Access数据库时,一切正常(即更新成功)。当我重新启动我的应用程序时,一切都显示出来没有任何问题(直到下一次我拨打UpdateQuery并点击进入我的DataGridView)。

我也打过电话EndEdit()``and刷新on the的DataGridView and calling的AcceptChanges()on both the数据集and the respective DataTable` - 什么都没有改变。

更新

所描述的行为只毫无问题执行UpdateQueryInsert S和Delete工作之后发生(数据被正确地更新的,无显示的问题)。

更新2

当我使用不同的事件处理程序的问题也存在 - 原来我用CellClick,我也用CellContentClickCellMouseClick尝试。它甚至发生在我完全不使用鼠标的情况下,但使用键盘在DataGridView内导航。

这似乎是“我的”数据显示不起作用的情况,我错过了什么?无论我查询/更新数据有多简单或复杂,我在表格中使用的所有DataGridView都会发生同样的错误。

+0

尝试设置BindigSource.AllowNew = false – daniele3004 2014-11-04 15:46:20

+0

@ daniele3004 - 尝试过,没有工作(如预期的 - 为什么这应该有所作为?)。 – Gorgsenegger 2014-11-05 10:29:16

+0

我使用BindingSource加载一个List或Array。在我的情况下,它的作品。 – daniele3004 2014-11-05 10:47:32

回答

0

所以这原来是TextBox.Clear()方法的一些讨厌的行为。我需要添加下列信息发布我的问题时,我并没有认为有必要的:

在我DataGridView我有一些数据绑定控件TextBox - 数据绑定的定义一样

txtSomeId.DataBindings.Add("Text", myDataGridView.DataSource, "ID"); 

调用UpdateQuery方法重载我后的数据(细),然后清除那些TextBox控件的内容:

txtSomeId.Clear(); 

根据MSDN,这种方法

“清除文本框中的所有内容”。

这是该页提供的所有信息。删除这些代码行,所有按预期工作,并没有更多的问题。

调用Clear方法也意味着数据绑定被部分删除(?)是我没有想到的。

我写了“部分”,因为绑定仍然适用于DataGridViewTextBox控件中的其他行,但不适用于第一个(此处仅适用于某些单元格)。在我看来,这是一个非常奇怪的行为,也许别人可以在这方面多说一些。

相关问题