如何显示带有“过滤的”绑定列表的网格数据

时间:2018-07-13 07:16:24

标签: c# winforms linq lambda

我必须在绑定列表绑定的网格中显示数据

BindingList<ExecutionSummaryData> ExecutionList
grid.DataSource = ExecutionList;

其中ExecutionSummaryData包含Name, Age, Address等属性(例如)。

当用户选择某些名称,年龄或其他参数时,现在要通过Winform进行操作,我必须从ExecutionList中选择数据,并且必须将过滤后的数据绑定到我的网格中。

  1. 我可以以某种方式将此查询绑定到ExecutionList以便每次更改查询字符串ExecutionList都将绑定到网格并显示过滤的数据吗?

  2. 我可以将通过过滤器字符串从ExecutionList检索到的任何子列表绑定到我的网格,对于每个过滤器查询更改,它将从ExecutionList获取数据并相应显示。

  3. 我不想清除每个过滤器上的数据并将其重新填充到ExecutionList,因为此网格将实时更新约10-20百万条记录。

编辑我的要求

请建议在此ExecutionList上使用Linq查询或Lambda表达式的语法是什么,以获取过滤的记录。 过滤器查询将包括具有多个实体的条件以进行比较并从列表中获取 就像“

  

ExecutionList中选择*,其中name in('N1','N2','N3',,,'N90')“   ('A1','A2','A3',,,'A90')中的AND年龄

请提出建议,因为我该如何实现?根据回复,我将使用缺少/所需的信息来更新我的问题。

谢谢,
灰烬

2 个答案:

答案 0 :(得分:0)

使用分页创建存储过程,并通过搜索过滤器并检索几千个日期。或者,您可以 IQueryable ,这样将根据您的过滤器触发查询并检索数据。 “这是评论,而不是答案。

答案 1 :(得分:0)

如果您想从DataTable中过滤数据,我建议您使用DataView

DataView dv = new DataView();
dv = new DataView(parameterDs.Tables[0], "ParameterName = '@" + parameter.Key + "'",string.Empty, DataViewRowState.CurrentRows);

您还可以在DataView上使用排序

dv.Sort = "Name";

然后使用

grid.DataSource = dv;

使用DataView的另一种方法是通过如下向其分配查询:

DataTable contacts = dataSet.Tables["Contact"];

EnumerableRowCollection<DataRow> query = from contact in contacts.AsEnumerable()
                                         where contact.Field<string>("LastName").StartsWith("S")
                                         orderby contact.Field<string>("LastName"), contact.Field<string>("FirstName")
                                         select contact;

DataView view = query.AsDataView();

bindingSource1.DataSource = view;
dataGridView1.AutoResizeColumns();

或通过使用DataView'RowFilter'属性:

DataTable contacts = dataSet.Tables["Contact"];

DataView view = contacts.AsDataView();

view.RowFilter = "LastName='Zhu'";

bindingSource1.DataSource = view;
dataGridView1.AutoResizeColumns();

,只要您想清除过滤器,只需写:

view.RowFilter = null; //or String.Empty

您可能想看看示例herehere