更新DataGridView而不会丢失选择

时间:2016-02-12 22:21:18

标签: c# winforms datagridview selection

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

这就是我的尝试:

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

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

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

  • datagridview触发的所有事件都已暂停
  • autoresize等关闭

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

有没有其他方法可以做到而不会失去选择?我可以记住选择并再次设置它,但是我失去了选择的方式/命令单元格和列。

1 个答案:

答案 0 :(得分: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();

[/代码]