使用C#将多个过滤应用于WPF数据网格

我有一个数据网格,它是一个数据库表。 我可以使用ICollectionView使用以下代码过滤数据网格:

lstOrdsRlsd = new ObservableCollection(GV.dbContext.OrdsRlsds); view = CollectionViewSource.GetDefaultView(lstOrdsRlsd); if (lstOrdsRlsd.Count > 0) { dgRecords1.ItemsSource = view; } private void FilterRecords(string FieldName, string Condition, object Value1, object Value2) { OrdsRlsd vitem; switch (FieldName) { case "OrderNo": view.Filter = item => { vitem = item as OrdsRlsd; switch (Condition) { case "=": if (vitem.OrderNo == Convert.ToDouble(Value1)) return true; break; case ">=": if (vitem.OrderNo >= Convert.ToDouble(Value1)) return true; break; case "<=": if (vitem.OrderNo = Convert.ToDouble(Value1) && vitem.OrderNo  { vitem = item as OrdsRlsd; switch (Condition) { case "=": if (vitem.DateRqd1 == Convert.ToDateTime(Value1)) return true; break; case ">=": if (vitem.DateRqd1 >= Convert.ToDateTime(Value1)) return true; break; case "<=": if (vitem.DateRqd1 = Convert.ToDateTime(Value1) && vitem.DateRqd1 <= Convert.ToDateTime(Value2)) return true; break; } return false; }; break; 

}

当只有一个过滤条件时,它适用于我。 但是当我应用多个条件时,datagrid按最后一个条件进行过滤。 这是用户单击filter按钮时执行的代码。

  private void BtnFilter_Click(object sender, RoutedEventArgs e) { foreach (var rec in lstClsFilterGrid) { FilterRecords(rec.FieldName, rec.Condition, rec.Value1, rec.Value2); } } 

其中lstClsFilterGrid是具有过滤条件的类对象的列表。

我附上了我的表格截图。 在此处输入图像描述

所以这个表单上的工作流程是,User创建一个条件来过滤并可以选择过滤集合或添加另一个条件,这是正确的吗?

如果是这样,那么你必须能够传递一组条件(可能是一个重载的filter方法)。

我之前已经过滤了多个(固定)条件(即几个复选框绑定到映射到预先安排的条件的属性,例如“过去30天”,“已完成订单”,“逾期发货”等)。

我的filter会根据所有这些属性检查项目。 在您的情况下,您有不确定数量的动态条件。

如果这是我,我会有一个列表,我将添加条件,然后将整个集合传递给过滤方法,然后每个对象必须满足for循环中的所有条件返回true。