【问题标题】:C#, Databound Datagridview showing wrong Data after inserting row programmaticallyC#,Databound Datagridview 在以编程方式插入行后显示错误数据
【发布时间】:2013-03-26 19:02:04
【问题描述】:

我遇到了数据绑定 DataGridView 的问题:

我正在使用包含来自 SQL-Server 数据库的内部连接的视图作为数据源。当我以编程方式插入行时,数据写入正确,但 DataGridView 没有显示它应该显示的数据。

视图中的某些列与另一个表连接。基本上,我将主表中的 ID 值与子表连接起来,以便能够显示列的文本值。当我将包含 id 值的行插入到 GridView 中时,它会显示 ID 值,但不显示相应的文本值。

如果我重新启动程序,一切都会正确显示。如何更新/刷新 GridView 以显示正确的文本值?我已经尝试过 GridView.EndEdit() 和 GridView.Refresh(),将数据源重新绑定到 GridView,并且一直在搜索网络但没有成功。

【问题讨论】:

  • 是不是类似这个问题:stackoverflow.com/questions/3340192/…
  • 你试过你的GridView.Refresh()吗?
  • 这个链接可能对你有帮助stackoverflow.com/questions/11020384/…
  • @DoanCuong 是的,我有,请参阅我的问题部分:“我已经尝试过 GridView.EndEdit() 和 GridView.Refresh()”;-)
  • @pratapk 谢谢,但这不是我的问题。我得到了一个更新的 Gridview,但它显示了错误的值 - 这意味着它显示的是 id 值,而不是适当的文本值。

标签: c# datagridview insert databound


【解决方案1】:

使用您在第一次加载页面时使用的相同查询重新查询。

【讨论】:

  • 嗯,如果我说得对,这就是我要避免的,因为这意味着重新加载数千行并导致延迟......
  • 无论如何你都必须这样做。如果其他用户同时修改了一些数据怎么办?通过刷新整个数据集,您可以获得最新数据,避免冲突。您始终可以使用数据分页来加载数据子集,而不是“数千行”。
  • 不,我不必,真的:如果在外部更改数据库中的数据,则更改程序中的数据将导致 DBConcurrencyException,这可以在 try catch 子句中捕获,询问用户如果他想更新数据。只有 15 个人同时处理数据库数据。由于数据量很大,抛出异常的可能性不大。所以我尽量避免重新加载。不幸的是,分页不是一种选择:-(
【解决方案2】:

DataGridView.Refresh() 用于图形 刷新,而不是数据 刷新。更新后需要重新绑定数据源。

插入后将数据源设置为null:DataGridView.DataSource = null;,然后通过重新查询数据并应用更新的源DataGridView.DataSource = someSource重新绑定数据源,最后再次调用DataBind()

它的性能对你来说不够,我可能会建议限制结果集中返回的行数,或者对你的表应用一些有价值的索引。

【讨论】:

  • 嗨!感谢您的回答。我已经在下面回答了 Oscar 的类似建议:如果在外部更改了数据库中的数据,则更改程序中的数据将导致 DBConcurrencyException,这可以在 try catch 子句中捕获,询问用户是否要更新数据。只有 15 个人同时处理数据库数据。由于数据量很大,抛出异常的可能性不大。所以我尽量避免重新加载。
  • 是否可以刷新元素(例如绑定源、数据适配器、表)以使 Gridview 再次显示正确的值 - 而无需重新加载数据?提前感谢您的回答:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 2016-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多