我正在使用以下代码将一堆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();
有没有人有更好的解决方案?我必须经历的对象列表越长,这个过程自然就越长。我无法设置一系列单元格,因为布尔值可能不是连续的。
答案 0 :(得分: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";
或者,你可以在数据库端过滤(如果有的话?)。让我们知道您的数据源是什么,我会根据需要进行更新。这是我能做的最好的事情!