【问题标题】:update DataGridView without losing selection在不丢失选择的情况下更新 DataGridView
【发布时间】:2016-02-12 22:21:17
【问题描述】:

我正在尝试更新我在 datagridview 中的数据(基于用户设置的检查),而不会丢失选择(在其上进行计算)。这对我有用,但比清除完整的 dgv、创建新的数据表并绑定它要慢得多。

这是我尝试过的:

  • 当datagridview需要完全更新(行数不同)时,我清除datagridview,新建一个datatable并绑定。这工作得很好而且很快,但是选择丢失了。选择丢失没问题,因为数据是全新的。

  • 有时我只需要更新 datagridview 中的值(而且我不想丢失选择)。我尝试更新绑定数据表中的值(有效)或直接更新 datagridview 中的值(这也有效)。但是,两者都比使用第一种方法制作全新的 datagridview 慢 很多 :-(

  • 更新数据网格视图时,我停止绘制放置它的面板

  • datagridview 触发的所有事件都被暂停
  • 自动调整大小等已关闭

谁能解释为什么更新单元格值比重做整个事情要慢得多?

还有其他方法可以做到这一点而不会丢失选择吗?我可以记住选择并再次设置它,但是我失去了选择的方式/顺序单元格和列。

【问题讨论】:

    标签: c# winforms datagridview selection


    【解决方案1】:

    我终于找到了大延迟发生的地方。我完全专注于 DataGridView,但结果是在绑定到它的 DataTable 中发生了延迟。

    为了快速完成:

    • 首先将DataTable 的每一行设置为BeginEdit,这样更改就不会生效。更新 DataGridView 后,不要让您的 DataTable 接受更改,这会使您失去在 DataGridView 中的选择。

    [代码]

    for (int Row = 0; Row < MyDataTable.Rows.Count; Row++) MyDataTable.Rows[Row].BeginEdit();
    
    // do your changes in the DataGridView (not the DataTable) here
    UpdateDataGridView();
    
    // never accept the changes in the DataTable, it will lose the selection in the DataGridView. Problem is that the DataTable is never updated, but this is not a problem in my case.
    //MyDataTable.AcceptChanges();
    

    [/代码]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-16
      • 2018-08-16
      相关资源
      最近更新 更多