【问题标题】:How do I smoothly update a GridView by updating the bound DataTable in C#?如何通过在 C# 中更新绑定的 DataTable 来平滑更新 GridView?
【发布时间】:2010-10-12 11:30:54
【问题描述】:

我有一个GridView,他的DataSource 设置为DataTableDataTable 每隔几秒就会被一些后端逻辑更新一次,此时会调用一个委托来刷新GridView

目前我只是重置DataSource,但这会导致问题 - 它会中断网格视图中正在进行的任何编辑并使选择“跳转”到左上角的单元格。

更新逻辑基本上是创建一个新的(列和行相同)DataTable

有没有没有任何缺点的标准方法?我唯一的选择是逐行更新当前的DataSource,以编程方式插入值吗?

谢谢!

【问题讨论】:

    标签: c# winforms gridview datatable datasource


    【解决方案1】:

    您应该使用BindingList 或一些支持更改通知的数据源。

    【讨论】:

      【解决方案2】:

      我对这个问题的很多事情感到困惑。如果您使用的是GridView,而不是DataGridView,那么您使用的是 ASP.NET、WPF 或 .NET 1.1。是哪个?

      下一步:您要完全创建一个新的DataTable?当然,当您重置DataSource 时,控件会被重置。它不知道您的新 DataTable 的架构与它正在替换的架构相同。它必须遍历列并重新建立绑定。

      另外,当然它正在丢失当前行。当前行属于旧DataTable,而不是新行。

      如果您希望绑定控件在更新底层数据源时保持其状态,更新底层数据源,不要用新的替换它。

      【讨论】:

      • 我确实在使用 DataGridView。新的 DataTable 具有相同的模式,并且只是从某个数据库生成并由某个过程修改。我当然知道为什么该行丢失了。我的问题是我应该怎么做,这样我就不必更换 DataTable ...
      • 哦,我不知道如何使用新的数据表更新现有的数据表(我不愿意逐个字段地扫描它......)
      • 看一下 DataTable.Merge 方法。这可能会满足您的需求。
      【解决方案3】:

      您的更新是否发生在后台线程上?我不知道它是否适用于你的场景,但你可以试试这个threaded binding list;查看示例以查看工作人员愉快地编辑网格。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-21
        • 1970-01-01
        • 2013-12-10
        • 2015-10-18
        • 2011-04-07
        • 2021-08-20
        • 1970-01-01
        相关资源
        最近更新 更多