Datagridview 不反映数据集更改

Posted

技术标签:

【中文标题】Datagridview 不反映数据集更改【英文标题】:Datagridview not reflecting dataset changes 【发布时间】:2012-07-17 12:10:44 【问题描述】:

我创建了一个以数据集作为数据源的 datagridview。在某个文本框的 keydown 事件中,我向数据集添加了一个新行,它直接反映在 datagridview 中。但是,如果我碰巧点击了datagridview中的最后一行“左边有星星的那一行”,无论我向数据集中添加了多少行,它们都不会被反映。如果我返回数据集行的计数,我可以看到它们仅被添加,它们不再反映在 datagridview 中。我尝试了 ds.acceptchanges 和 datagridview.refresh 但没有帮助。有什么解决办法吗?

这是我使用的代码:

if ds.tables(0).rows(datagridview.rows.count-1).item("Amount")<>0 then
ds.tables(0).rows.add(ds.tables(0).newrow)
end if

【问题讨论】:

【参考方案1】:

好的,首先,您应该使用绑定源。这就是使您的 DataGridView 和 DataTable 合二为一的原因。

首先要做的是:-

BindingSource bs = new BindingSource();
bs.DataSource = ds.tables[0];

现在您需要为您的 DatagridView 设置数据源,这将是您的 BindingSource bs:-

DatagridView1.Datasource = bs;

现在,您在 DatagridView 中所做的任何更改都会自动反映在您的 DataSet 表中。这也意味着在 DataTable 中所做的任何更改都会自动反映在您的 GridView 中。

【讨论】:

这已经完成了,这就是为什么我觉得这个错误真的很奇怪,因为绑定工作正常,直到你点击左边有星 * 的最后一行 您可以尝试更改“KeyDown”事件,以便它在 DataGridView 中添加一行,而不是在 DataTable 中,因为这两个对象已绑定,它应该将更改反映回 DataSet。跨度>

以上是关于Datagridview 不反映数据集更改的主要内容,如果未能解决你的问题,请参考以下文章

如何在不删除适配器的情况下更新数据集以反映数据源中添加的列?

对 DataGridView 进行排序后,如何更新数据源以反映 DataGridView 的绑定?

如何更改 DataGridView 中的列宽?

将datagridview中的数据集存储到新的访问数据库文件c#

数据集更新vb.net后DataGridView不刷新

在不更改数据源的情况下过滤 DataGridView