Exemple #1
0
        private void RebuildFilter()
        {
            this.FilterDescriptors.BeginUpdate();
            for (int index = this.FilterDescriptors.Count - 1; index >= 0; --index)
            {
                FilterDescriptor filterDescriptor = this.FilterDescriptors[index];
                filterDescriptor.PropertyChanged -= new PropertyChangedEventHandler(this.FilterExpression_PropertyChanged);
                this.FilterDescriptors.Remove(filterDescriptor);
            }
            this.FilterDescriptors.Clear();
            FilterDescriptorCollection filterDescriptors = this.FilterDescriptors;

            if (this.predicates.Count > 0)
            {
                filterDescriptors.LogicalOperator = GridViewHelper.GetLogicalOperator(this.predicates[0].BinaryOperator);
            }
            List <FilterPredicate> validPredicates = this.GetValidPredicates();

            for (int index = 0; index < validPredicates.Count; ++index)
            {
                object[]       predicateValues = this.GetPredicateValues(validPredicates[index]);
                FilterOperator filterOperator  = GridViewHelper.GetFilterOperator(validPredicates[index].Function);
                if (filterOperator != FilterOperator.None)
                {
                    FilterDescriptor filterDescriptor = new FilterDescriptor(this.PropertyName, filterOperator, predicateValues[0]);
                    filterDescriptor.PropertyChanged += new PropertyChangedEventHandler(this.FilterExpression_PropertyChanged);
                    filterDescriptors.Add(filterDescriptor);
                }
                else
                {
                    CompositeFilterDescriptor.DescriptorType type = CompositeFilterDescriptor.DescriptorType.Between;
                    if (this.predicates[index].Function == GridKnownFunction.NotBetween)
                    {
                        type = CompositeFilterDescriptor.DescriptorType.NotBetween;
                    }
                    CompositeFilterDescriptor descriptor = CompositeFilterDescriptor.CreateDescriptor(type, this.PropertyName, predicateValues[0], predicateValues[1]);
                    descriptor.PropertyChanged += new PropertyChangedEventHandler(this.FilterExpression_PropertyChanged);
                    filterDescriptors.Add((FilterDescriptor)descriptor);
                }
                if (this.IsComposite(validPredicates.Count - index, validPredicates))
                {
                    CompositeFilterDescriptor filterDescriptor = new CompositeFilterDescriptor();
                    filterDescriptor.PropertyChanged += new PropertyChangedEventHandler(this.FilterExpression_PropertyChanged);
                    filterDescriptor.LogicalOperator  = GridViewHelper.GetLogicalOperator(validPredicates[index + 2].BinaryOperator);
                    filterDescriptors.Add((FilterDescriptor)filterDescriptor);
                    filterDescriptors = filterDescriptor.FilterDescriptors;
                }
            }
            this.FilterDescriptors.EndUpdate();
        }