我正在使用以下代码将一堆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();
有谁有更好的解决方案?自然,我必须经历的对象列表越长,此过程花费的时间就越长。我无法设置单元格范围,因为布尔值可能不连续。
最佳答案
正如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";
或者,您可以在数据库端进行过滤(如果有的话?)。让我们知道您的数据源是什么,我将酌情进行更新。这是我能做的最好的!