我有一个用.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
就我的新行行为而言,没有任何区别。
答案 0 :(得分:2)
在经过大量的试验和错误以及在线搜索后,我找到了一个似乎有效的解决方案。
我没有将DataGridView直接绑定到我的DataTable,而是创建了一个BindingSource,将BindingSource绑定到我的DataTable,然后将我的DataGridView绑定到BindingSource,最后在array(
[21, 148]
)
事件中,我使用了{{1}的组合和} dgvItems_CellValueChanged
使它工作。
代码示例:
EndEdit()
我在this thread上遇到了这个解决方案,经过一些测试后似乎完美无缺。
现在,我的DataGridView中的新行被添加到CellValueChanged事件结束时绑定的DataTable中。