在C#
中,我通过DataGridView
填充了DataSource
。使用一些定制的过滤器,我可以确定行的子集(准确地通过遍历行并检查列中的条件),并且只需要在DatGridView中保留/显示这些行。
我了解的一个选项是遍历网格并隐藏索引集之外的行。但是,这对于较大的行集来说非常缓慢。 我的问题是:
给定一个绑定到数据源及其行的子集的datagridview,有没有一种有效的方法来仅将那些行保留在datagridview中?
答案 0 :(得分:1)
缓慢的速度可能仅来自GUI更新。您可能想要
后者将加快包括滚动在内的所有显示操作。
BindingSource
。(如果您可以将逻辑放入过滤器,则不需要多余的列。)
假设一个DataTable DT
作为您的DataSource
,首先添加一个过滤器列:
DT.Columns.Add("Filter", typeof(int));
下一步创建一个BindingSource BS = new BindingSource();
现在将原始数据源绑定到该绑定源并将其用作新数据源:
BS.DataSource = DT;
yourDGV.DataSource = BS;
现在,您可以使用代码为过滤器列设置值,并最终设置或取消设置过滤器:
BS.Filter = "Filter = 23"; // use your indicator logic!
BS.Filter = ""; // unset filter
对于过滤器,您可以使用DataColumn.Expression属性syntax。
示例:
yourDGV.Columns.Add("Filter", "filter");
yourDGV.Columns["Filter"].DataPropertyName = "Filter";
答案 1 :(得分:0)
如何通过代码填充Dgv。编写一条Select语句以填充DataTable,然后继续将Datatable设置为您的datagridview的DS,然后最后,如果您需要过滤,只需调用查询方法,然后它也会调用其他方法。