如何过滤DataGridView以仅保留给定的行集

时间:2019-05-29 07:18:08

标签: c# datagridview datasource

C#中,我通过DataGridView填充了DataSource。使用一些定制的过滤器,我可以确定行的子集(准确地通过遍历行并检查列中的条件),并且只需要在DatGridView中保留/显示这些行。

我了解的一个选项是遍历网格并隐藏索引集之外的行。但是,这对于较大的行集来说非常缓慢。 我的问题是:

  

给定一个绑定到数据源及其行的子集的datagridview,有没有一种有效的方法来仅将那些行保留在datagridview中?

2 个答案:

答案 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

  • 如果要查看过滤器列,还需要将其添加到DGV列中,并设置与数据源的连接。

示例:

yourDGV.Columns.Add("Filter", "filter");
yourDGV.Columns["Filter"].DataPropertyName = "Filter";

答案 1 :(得分:0)

如何通过代码填充Dgv。编写一条Select语句以填充DataTable,然后继续将Datatable设置为您的datagridview的DS,然后最后,如果您需要过滤,只需调用查询方法,然后它也会调用其他方法。