更快的方法使DataGridViewRow不可见

3
我正在使用以下代码将一堆DataGridViewRow元素设置为不可见。我使用的规则是检查相关的数据源是否有一个布尔标志。如果标志为true,则显示该行,否则它将不可见。

以下代码有效,但是会消耗相当多的时间:

CurrencyManager currencyManager = (CurrencyManager)BindingContext[dataGridView.DataSource];

currencyManager.SuspendBinding();

foreach (DataGridViewRow row in dataGridView.Rows)
{
    if (!objectList.list[row.Index].Selected)
    {
        row.Visible = false;
    }
}
currencyManager.ResumeBinding();

有没有更好的解决方案?随着我需要查找的对象列表越来越长,这个过程所需时间也越来越长。我不能设置单元格范围,因为布尔值可能不是连续的。


2
为什么不在绑定之前过滤数据源? - PraveenVenu
1个回答

1
正如PraVn所说,您可以在使用datagridview之前进行过滤。如果您正在使用DataSet、DataTable或DataView,只需执行以下操作:
DataSet ds = new DataSet();
ds.Tables[0].DefaultView.RowFilter = "YourBooleanColumn = 1";

DataView dv = new DataView();
dv.RowFilter = "YourBooleanColumn = 1";

DataTable dt = new DataTable();
dt.RowFilter.DefaultView.RowFilter = "YourBooleanColumn = 1";

或者,如果有的话,您可以在数据库端进行过滤。请告诉我们您的数据源是什么,我会相应地更新。这是我所能做到的最好的!


我一直很固执,试图不使用多个列表。正确的解决方案是按照PraVn和你说的那样:过滤到新集合中。感谢你们两位! - Kashif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接