【问题标题】: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();
[/代码]