【问题标题】:Apply multiple Filtering to WPF datagrid using C#使用 C# 将多个过滤应用于 WPF 数据网格
【发布时间】:2011-11-25 08:16:29
【问题描述】:

我有一个绑定到数据库表的数据网格。我可以使用下面的代码使用 ICollectionView 过滤数据网格:

            lstOrdsRlsd = new ObservableCollection<OrdsRlsd>(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))
                                return true;
                            break;
                        case "between":
                            if (vitem.OrderNo >= Convert.ToDouble(Value1) && vitem.OrderNo <= Convert.ToDouble(Value2))
                                return true;
                            break;
                    }

                    return false;
                };
                break;

            case "DateRqd1":

                view.Filter = item =>
                {
                    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))
                                return true;
                            break;
                        case "between":
                            if (vitem.DateRqd1 >= Convert.ToDateTime(Value1) && vitem.DateRqd1 <= Convert.ToDateTime(Value2))
                                return true;
                            break;

                    }
                    return false;
                };
                break;

}

当只有一个过滤条件时,它适用于我。但是当我应用多个条件时,数据网格会按最后一个条件过滤。这是用户点击过滤按钮时执行的代码。

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

    }

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

我附上我的表单截图。

【问题讨论】:

    标签: c# wpf datagrid filter


    【解决方案1】:

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

    如果是这样,那么您将必须能够传递一组条件(可能传递给重载的过滤器方法)。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-20
      • 1970-01-01
      • 2013-01-20
      • 2019-06-30
      相关资源
      最近更新 更多