程序化过滤RadGridView

时间:2017-03-03 11:47:07

标签: c# wpf telerik

让我们说在我的数据库中,在名为 UserName 的列中,我有这个值 Jean-Andrew Pierre 。当我输入 Andrew Jean Pierre 时,我在创建用于从db检索此值的过滤器时遇到问题。如您所见,名称的顺序不同,并且缺少某些字符。

我试过这个:

var operatorNameFilter = radGridView.Columns[nameof(Username)].ColumnFilterDescriptor;
   if (string.IsNullOrEmpty(username))
   {
       operatorNameFilter.Clear();
       return;
   }

    allOperatorsName = Regex.Split(username, @"\W+");
       foreach (var name in allOperatorsName)
             operatorNameFilter.DistinctFilter.AddDistinctValue(name);

       operatorNameFilter.FieldFilter.Filter1.Operator = FilterOperator.Contains;
       operatorNameFilter.FieldFilter.Filter1.LogicalOperator = FilterCompositionLogicalOperator.And;
       operatorNameFilter.FieldFilter.Filter1.Value = username;

我相信必须删除最后一行,但有或没有,没有任何事情发生

谢谢, 安德列亚

1 个答案:

答案 0 :(得分:0)

经过几次尝试后我找到了答案:

        private void FilterByOperatorNames(RadGridView radGridView)
        {
            var operatorNameFilter = radGridView.Columns[nameof(Username)].ColumnFilterDescriptor;
            if (string.IsNullOrEmpty(username))
            {
                operatorNameFilter.Clear();
                return;
            }

            var allOperatorNames = Regex.Split(username, @"\W+");
            var userNamesCompositeFilter = new CompositeFilterDescriptor();
            foreach (var name in allOperatorNames)
            {
                var filterDescriptor = new FilterDescriptor(nameof(Username), FilterOperator.Contains, name);
                userNamesCompositeFilter.FilterDescriptors.Add(filterDescriptor);
            }
            userNamesCompositeFilter.LogicalOperator = FilterCompositionLogicalOperator.And;
            radGridView.FilterDescriptors.Add(userNamesCompositeFilter);
        }

我希望能帮助别人。