过滤数据绑定数据网格视图(带有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在影响性能。也许它触发得太频繁了?

过滤数据绑定数据网格视图(带有combobox列)的数据视图会使其速度慢得令人难以置信

如果UI有太多的行要循环通过,那么列的自动调整可能会减慢速度。如果您有以下设置(以编程方式或在属性中),则可能需要更改设置。不尝试。如果速度很快,请将其设置为使用标题或仅使用可见单元格。

detailsDataGridView.AutoSizeColumnsMode = 
        DataGridViewAutoSizeColumnsMode.AllCells;

不过,我不确定这是否会影响到你。SelectedIndexChanged似乎被调用得太频繁了。如果在设置datasource之后设置DisplayMemberValueMember,则可能会发生这种情况,因为它会多次调用SelectedIndexChanged事件,然后再次迭代整个表。

您还可以使用ComboBox.SelectionChangeCommitted事件,它对数据绑定之类的事情不太敏感,因为您可能不希望触发事件。