3

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

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

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();

有没有人有更好的解决方案?我必须经过的对象列表越长,这个过程自然需要的时间就越长。我无法设置单元格范围,因为布尔值可能不连续。

4

1 回答 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";

或者,您可以在数据库端进行过滤(如果有的话?)。让我们知道您的数据源是什么,我会酌情更新。这是我能做的最好的了!

于 2012-03-13T02:22:54.827 回答