我正在使用以下代码将一堆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";


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

08-26 14:33