过滤数据绑定数据网格视图(带有combobox列)的数据视图会使其速度慢得令人难以置信
本文关键字:视图 数据 速度慢 令人难以置信 combobox 数据网 数据绑定 网格 过滤 带有 | 更新日期: 2023-09-27 18:00:33
我面临的问题听起来和http://www.windows-tech.info/3/fc05dcdb57f27f48.php然而,那里描述的变通方法对我不起作用(除非我误解了它)。
我有一个DataGridView
,它绑定到DataTable
,也有ComboBox
列(根据上面链接中的用户,这很重要)。我正试图基于单独的ComboBox
来过滤这个DataGridView
,但一旦我这样做,它就变得慢得令人无法接受。
目前,我的ComboBox
更改事件中只有这个:
private void cmbFilter_SelectedIndexChanged(object sender, EventArgs e)
{
(dgvVolReport.DataSource as DataTable).DefaultView.RowFilter = string.Empty;
}
所以我甚至没有过滤,甚至只是将.RowFilter
设置为string .Empty
会使它变慢。
有人知道这件事吗,如何解决或解决方法?
更新:奇怪的是,如果我叫这条线:
((DataTable)((DataGridView)sender).DataSource).DefaultView.RowFilter = string.Empty;
在我的CellEndEdit
事件中,只要ComboBox
SelectedIndexChanged
中的那行不存在,它就不会使它变慢。因此,似乎是外部ComboBox
在影响性能。也许它触发得太频繁了?
如果UI有太多的行要循环通过,那么列的自动调整可能会减慢速度。如果您有以下设置(以编程方式或在属性中),则可能需要更改设置。不尝试。如果速度很快,请将其设置为使用标题或仅使用可见单元格。
detailsDataGridView.AutoSizeColumnsMode =
DataGridViewAutoSizeColumnsMode.AllCells;
不过,我不确定这是否会影响到你。SelectedIndexChanged似乎被调用得太频繁了。如果在设置datasource
之后设置DisplayMember
和ValueMember
,则可能会发生这种情况,因为它会多次调用SelectedIndexChanged事件,然后再次迭代整个表。
您还可以使用ComboBox.SelectionChangeCommitted
事件,它对数据绑定之类的事情不太敏感,因为您可能不希望触发事件。