手动向DataGridView添加新行不会立即更新绑定的DataTable

时间:2015-07-02 23:02:01

标签: winforms c#-4.0 datagridview datatable

我有一个用.net-4.0

编写的c#windows表单应用程序

我有一个datagridview(dgvItems),我以编程方式绑定到导入函数末尾的数据集和数据表。

我有一个导入按钮,可以将所选excel文件中的数据导入到名为_dtItemAdjustList的表中,一旦导入数据,我将该表绑定到我的网格。我用来绑定网格的代码是:

dgvItems.DataSource = _dsQtyAdjust;
dgvItems.DataMember = "Item Adjust List";
dgvItems.Refresh();

到目前为止,一切正常,如果我在datagridview中编辑导入的数据,它会在编辑每个单元格后更新绑定表_dtItemAdjustList

当我尝试手动向datagridview添加行时,我的问题就出现了,它不会立即将新行添加到绑定的数据表中。

示例:我在dgvItems_CellValueChanged事件结束时设置了一个断点,并添加了_dtItemAdjustList.Rows.Count观看,这就是发生的事情。

导入数据并编辑其中一条现有导入行后,手表会显示正确的行数,请说 5

现在我点击最后一行*,然后在我的项目列中输入内容并点击标签,断点会触发,但我的行计数仍然只显示 5 ,我会填写更多单元格在新行中,但每次我离开一个单元格并且我的CellValueChanged事件触发并且行数保持在 5

接下来我添加了第二个手动行,现在我立即跳出第一个单元格,我填写了第二个新行,我的行计数器转到 6 ,但从技术上讲,此时我已将 2 手动行添加到导入的 5 中,因此计数器应显示为 7

重复一遍,基本上每个手动添加到datagridview的新行都不会添加到绑定数据表中,直到 a)添加另一行或 b)我去返回并重新编辑现有行上的单元格。

编辑 忘了提一下我尝试用两种方式绑定我的DataGridView:

DataSource = _dsQtyAdjust //dataset Name
DataMember = "Item Adjust List" // Table Name in the dataset

DataSource = _dtItemAdjustList

就我的新行行为而言,没有任何区别。

1 个答案:

答案 0 :(得分:2)

在经过大量的试验和错误以及在线搜索后,我找到了一个似乎有效的解决方案。

我没有将DataGridView直接绑定到我的DataTable,而是创建了一个BindingSource,将BindingSource绑定到我的DataTable,然后将我的DataGridView绑定到BindingSource,最后在array( [21, 148] ) 事件中,我使用了{{1}的组合和} dgvItems_CellValueChanged使它工作。

代码示例:

EndEdit()

我在this thread上遇到了这个解决方案,经过一些测试后似乎完美无缺。

现在,我的DataGridView中的新行被添加到CellValueChanged事件结束时绑定的DataTable中。