首页 文章

更新DataGridView而不会丢失选择

提问于
浏览
0

我正在尝试更新我在datagridview中的数据(基于用户设置的检查),而不会丢失选择(进行计算) . 这对我有用,但比清除完整的dgv慢很多,制作一个新的数据表并绑定它 .

这是我试过的:

  • 当datagridview需要完全更新(不同的行数)时,我清除datagridview,创建一个新的数据表并绑定它 . 这很好用而且速度很快,但选择丢失了 . 选择丢失没问题,因为数据是全新的 .

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

  • 更新datagridview时,我停止绘制放置它的面板

  • datagridview触发的所有事件都将被挂起

  • autoresize等已关闭

任何人都可以解释为什么更新cellvalues比重做整个事情要慢得多吗?

还有另一种方法可以做到而不会失去选择吗?我能记住选择并再次设置它,但后来我失去了选择的方式/命令单元格和列 .

1 回答

  • 0

    我终于找到了发生大延迟的地方 . 我完全专注于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();
    

    [/码]

相关问题