示例#1
0
        public static CompositeFilterDescriptor.DescriptorType GetDescriptorType(
            CompositeFilterDescriptor compositeDescriptor)
        {
            CompositeFilterDescriptor.DescriptorType descriptorType = CompositeFilterDescriptor.DescriptorType.Unknown;
            if (compositeDescriptor == null || compositeDescriptor.FilterDescriptors.Count != 2)
            {
                return(descriptorType);
            }
            FilterDescriptor filterDescriptor1 = compositeDescriptor.FilterDescriptors[0];
            FilterDescriptor filterDescriptor2 = compositeDescriptor.FilterDescriptors[1];

            if (filterDescriptor1 is CompositeFilterDescriptor || filterDescriptor2 is CompositeFilterDescriptor)
            {
                return(descriptorType);
            }
            if (filterDescriptor1.Operator == FilterOperator.IsGreaterThanOrEqualTo && filterDescriptor2.Operator == FilterOperator.IsLessThanOrEqualTo && compositeDescriptor.LogicalOperator == FilterLogicalOperator.And)
            {
                descriptorType = CompositeFilterDescriptor.DescriptorType.Between;
            }
            if (compositeDescriptor.NotOperator && descriptorType == CompositeFilterDescriptor.DescriptorType.Between || descriptorType == CompositeFilterDescriptor.DescriptorType.Unknown && filterDescriptor1.Operator == FilterOperator.IsLessThanOrEqualTo && (filterDescriptor2.Operator == FilterOperator.IsGreaterThanOrEqualTo && !compositeDescriptor.NotOperator) && compositeDescriptor.LogicalOperator == FilterLogicalOperator.Or)
            {
                descriptorType = CompositeFilterDescriptor.DescriptorType.NotBetween;
            }
            return(descriptorType);
        }
示例#2
0
        public static CompositeFilterDescriptor CreateDescriptor(
            CompositeFilterDescriptor.DescriptorType type,
            string propertyName,
            params object[] values)
        {
            if (type == CompositeFilterDescriptor.DescriptorType.Unknown)
            {
                throw new InvalidOperationException("You cannot create undefined composite filter descriptor.");
            }
            CompositeFilterDescriptor filterDescriptor = new CompositeFilterDescriptor();

            filterDescriptor.PropertyName = propertyName;
            switch (type - 1)
            {
            case CompositeFilterDescriptor.DescriptorType.Unknown:
            case CompositeFilterDescriptor.DescriptorType.Between:
                if (values != null && values.Length != 2)
                {
                    throw new ArgumentException(nameof(values));
                }
                if (values == null)
                {
                    values = new object[2];
                }
                filterDescriptor.LogicalOperator = FilterLogicalOperator.And;
                filterDescriptor.FilterDescriptors.Add(new FilterDescriptor(propertyName, FilterOperator.IsGreaterThanOrEqualTo, values[0]));
                filterDescriptor.FilterDescriptors.Add(new FilterDescriptor(propertyName, FilterOperator.IsLessThanOrEqualTo, values[1]));
                filterDescriptor.NotOperator = type == CompositeFilterDescriptor.DescriptorType.NotBetween;
                break;
            }
            return(filterDescriptor);
        }
 private CompositeFilterDescriptor GetCompositeFilterDescriptor(
     CompositeFilterDescriptor.DescriptorType desiredType,
     CompositeFilterDescriptor currentDescriptor,
     System.Type dataType)
 {
     return(currentDescriptor == null?CompositeFilterDescriptor.CreateDescriptor(desiredType, this.FieldName, dataType, (object[])null) : currentDescriptor.ConvertTo(desiredType, dataType));
 }
示例#4
0
        public static CompositeFilterDescriptor CreateDescriptor(
            CompositeFilterDescriptor.DescriptorType type,
            string propertyName,
            Type dataType,
            params object[] values)
        {
            if (type == CompositeFilterDescriptor.DescriptorType.Unknown)
            {
                throw new InvalidOperationException("You cannot create undefined composite filter descriptor.");
            }
            CompositeFilterDescriptor filterDescriptor1 = new CompositeFilterDescriptor();

            filterDescriptor1.PropertyName = propertyName;
            switch (type - 1)
            {
            case CompositeFilterDescriptor.DescriptorType.Unknown:
            case CompositeFilterDescriptor.DescriptorType.Between:
                if (values != null && values.Length != 2)
                {
                    throw new ArgumentException(nameof(values));
                }
                if (values == null)
                {
                    values = new object[2];
                }
                FilterDescriptor filterDescriptor2;
                FilterDescriptor filterDescriptor3;
                if ((object)dataType == (object)typeof(DateTime))
                {
                    DateTime?nullable1 = new DateTime?();
                    DateTime?nullable2 = new DateTime?();
                    if (values[0] != null)
                    {
                        nullable1 = new DateTime?((DateTime)values[0]);
                    }
                    if (values[1] != null)
                    {
                        nullable2 = new DateTime?((DateTime)values[1]);
                    }
                    filterDescriptor2 = (FilterDescriptor) new DateFilterDescriptor(propertyName, FilterOperator.IsGreaterThanOrEqualTo, nullable1);
                    filterDescriptor3 = (FilterDescriptor) new DateFilterDescriptor(propertyName, FilterOperator.IsLessThanOrEqualTo, nullable2);
                }
                else
                {
                    filterDescriptor2 = new FilterDescriptor(propertyName, FilterOperator.IsGreaterThanOrEqualTo, values[0]);
                    filterDescriptor3 = new FilterDescriptor(propertyName, FilterOperator.IsLessThanOrEqualTo, values[1]);
                }
                filterDescriptor1.LogicalOperator = FilterLogicalOperator.And;
                filterDescriptor1.FilterDescriptors.AddRange(new FilterDescriptor[2]
                {
                    filterDescriptor2,
                    filterDescriptor3
                });
                filterDescriptor1.NotOperator = type == CompositeFilterDescriptor.DescriptorType.NotBetween;
                break;
            }
            return(filterDescriptor1);
        }
示例#5
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();
        }
示例#6
0
        protected virtual CompositeFilterDescriptor GetCompositeFilterDescriptor(
            CompositeFilterDescriptor.DescriptorType desiredType,
            CompositeFilterDescriptor currentDescriptor)
        {
            CompositeFilterDescriptor filterDescriptor;

            if (currentDescriptor != null)
            {
                filterDescriptor             = currentDescriptor.Clone() as CompositeFilterDescriptor;
                filterDescriptor.NotOperator = desiredType == CompositeFilterDescriptor.DescriptorType.NotBetween;
            }
            else
            {
                filterDescriptor = CompositeFilterDescriptor.CreateDescriptor(desiredType, this.dataColumn.Name, this.dataColumn.DataType, (object[])null);
            }
            return(filterDescriptor);
        }
        protected virtual RadDropDownMenu CreateFilterMenu(System.Type dataType)
        {
            FilterDescriptor          descriptor       = this.Descriptor;
            CompositeFilterDescriptor filterDescriptor = descriptor as CompositeFilterDescriptor;

            CompositeFilterDescriptor.DescriptorType descriptorType = CompositeFilterDescriptor.GetDescriptorType(filterDescriptor);
            RadDropDownMenu menu = new RadDropDownMenu();
            List <FilterOperationContext> filterOperations = FilterOperationContext.GetFilterOperations(dataType);
            bool flag = this.ColumnInfo is GridViewMultiComboBoxColumn;

            foreach (FilterOperationContext context in filterOperations)
            {
                if (!flag || context.Operator == FilterOperator.None || (context.Operator == FilterOperator.IsEqualTo || context.Operator == FilterOperator.IsNotEqualTo))
                {
                    RadFilterOperationMenuItem operationMenuItem = new RadFilterOperationMenuItem(context);
                    operationMenuItem.IsChecked = filterDescriptor == null && operationMenuItem.Operator == descriptor.Operator;
                    operationMenuItem.Click    += new EventHandler(this.FilterMenuItem_Click);
                    menu.Items.Add((RadItem)operationMenuItem);
                }
            }
            if (GridViewHelper.IsNumeric(dataType) || (object)dataType == (object)typeof(DateTime))
            {
                RadFilterComposeMenuItem filterComposeMenuItem1 = new RadFilterComposeMenuItem("FilterFunctionsBetween");
                filterComposeMenuItem1.IsChecked        = filterDescriptor != null && descriptorType == CompositeFilterDescriptor.DescriptorType.Between;
                filterComposeMenuItem1.FilterDescriptor = (FilterDescriptor)this.GetCompositeFilterDescriptor(CompositeFilterDescriptor.DescriptorType.Between, filterDescriptor, dataType);
                filterComposeMenuItem1.Click           += new EventHandler(this.FilterMenuItem_Click);
                menu.Items.Add((RadItem)filterComposeMenuItem1);
                RadFilterComposeMenuItem filterComposeMenuItem2 = new RadFilterComposeMenuItem("FilterFunctionNotBetween");
                filterComposeMenuItem2.IsChecked        = descriptorType == CompositeFilterDescriptor.DescriptorType.NotBetween;
                filterComposeMenuItem2.FilterDescriptor = (FilterDescriptor)this.GetCompositeFilterDescriptor(CompositeFilterDescriptor.DescriptorType.NotBetween, filterDescriptor, dataType);
                filterComposeMenuItem2.Click           += new EventHandler(this.FilterMenuItem_Click);
                menu.Items.Add((RadItem)filterComposeMenuItem2);
            }
            if ((object)dataType != (object)typeof(Image))
            {
                RadFilterComposeMenuItem filterComposeMenuItem = new RadFilterComposeMenuItem("FilterFunctionsCustom");
                filterComposeMenuItem.FilterDescriptor = descriptor.Clone() as FilterDescriptor;
                filterComposeMenuItem.Click           += new EventHandler(this.FilterMenuItem_Click);
                filterComposeMenuItem.IsChecked        = filterDescriptor != null && descriptorType == CompositeFilterDescriptor.DescriptorType.Unknown;
                menu.Items.Add((RadItem)filterComposeMenuItem);
            }
            menu.PopupOpening += new RadPopupOpeningEventHandler(this.contextMenu_PopupOpening);
            menu.PopupClosed  += new RadPopupClosedEventHandler(this.contextMenu_PopupClosed);
            GridViewContextMenuManager.UpdateMenuTheme((GridVisualElement)this.GridViewElement, menu);
            return(menu);
        }
示例#8
0
        private static CompositeFilterDescriptor ConvertDescriptor(
            CompositeFilterDescriptor compositeFilter,
            CompositeFilterDescriptor.DescriptorType type,
            Type dataType)
        {
            if (compositeFilter == null)
            {
                throw new ArgumentNullException(nameof(compositeFilter));
            }
            if (type == CompositeFilterDescriptor.DescriptorType.Unknown)
            {
                throw new InvalidOperationException("You cannot convert the filter descriptor to unknown type.");
            }
            CompositeFilterDescriptor filterDescriptor1 = compositeFilter.Clone() as CompositeFilterDescriptor;

            while (filterDescriptor1.FilterDescriptors.Count > 2)
            {
                int index = filterDescriptor1.FilterDescriptors.Count - 1;
                filterDescriptor1.FilterDescriptors.RemoveAt(index);
            }
            while (filterDescriptor1.FilterDescriptors.Count < 2)
            {
                if ((object)dataType == (object)typeof(DateTime))
                {
                    filterDescriptor1.FilterDescriptors.Add((FilterDescriptor) new DateFilterDescriptor());
                }
                else
                {
                    filterDescriptor1.FilterDescriptors.Add(new FilterDescriptor());
                }
            }
            if (type == CompositeFilterDescriptor.DescriptorType.Between || type == CompositeFilterDescriptor.DescriptorType.NotBetween)
            {
                filterDescriptor1.LogicalOperator = FilterLogicalOperator.And;
                FilterDescriptor filterDescriptor2 = filterDescriptor1.FilterDescriptors[0];
                filterDescriptor2.PropertyName = filterDescriptor1.PropertyName;
                filterDescriptor2.Operator     = FilterOperator.IsGreaterThanOrEqualTo;
                FilterDescriptor filterDescriptor3 = filterDescriptor1.FilterDescriptors[1];
                filterDescriptor3.PropertyName = filterDescriptor1.PropertyName;
                filterDescriptor3.Operator     = FilterOperator.IsLessThanOrEqualTo;
                filterDescriptor1.NotOperator  = type == CompositeFilterDescriptor.DescriptorType.NotBetween;
            }
            return(filterDescriptor1);
        }
示例#9
0
        protected virtual void CreateFilterOperationsMenuItems()
        {
            FilterDescriptor          filterDescriptor1 = this.GetFilterDescriptor();
            CompositeFilterDescriptor filterDescriptor2 = filterDescriptor1 as CompositeFilterDescriptor;

            CompositeFilterDescriptor.DescriptorType descriptorType = CompositeFilterDescriptor.GetDescriptorType(filterDescriptor2);
            RadMenuItem radMenuItem = new RadMenuItem();

            radMenuItem.IsChecked = false;
            radMenuItem.Text      = LocalizationProvider <RadGridLocalizationProvider> .CurrentProvider.GetLocalizedString("FilterMenuAvailableFilters");

            radMenuItem.StretchVertically = false;
            this.Items.Add((RadItem)radMenuItem);
            RadMenuSeparatorItem menuSeparatorItem = new RadMenuSeparatorItem();

            menuSeparatorItem.StretchVertically = false;
            this.Items.Add((RadItem)menuSeparatorItem);
            System.Type filteringDataType = this.ColumnFilteringDataType;
            foreach (FilterOperationContext filterOperation in FilterOperationContext.GetFilterOperations(filteringDataType))
            {
                if (filterOperation.Operator == FilterOperator.None || filterOperation.Operator == FilterOperator.IsNull || filterOperation.Operator == FilterOperator.IsNotNull)
                {
                    RadFilterOperationMenuItem operationMenuItem = new RadFilterOperationMenuItem(filterOperation);
                    operationMenuItem.Click += new EventHandler(this.FilterMenuItem_Click);
                    if (filterOperation.Operator == FilterOperator.None)
                    {
                        operationMenuItem.Enabled = filterDescriptor2 != null && filterDescriptor2.Operator != FilterOperator.None || operationMenuItem.Operator != filterDescriptor1.Operator;
                        operationMenuItem.Text    = LocalizationProvider <RadGridLocalizationProvider> .CurrentProvider.GetLocalizedString("FilterMenuClearFilters");

                        operationMenuItem.Image             = (Image)Resources.ClearFilter;
                        operationMenuItem.TextImageRelation = TextImageRelation.ImageBeforeText;
                        operationMenuItem.ImageAlignment    = ContentAlignment.MiddleLeft;
                        operationMenuItem.DisplayStyle      = DisplayStyle.ImageAndText;
                        this.Items.Insert(0, (RadItem)operationMenuItem);
                    }
                    else
                    {
                        operationMenuItem.IsChecked = (filterDescriptor2 == null || filterDescriptor2.Operator == FilterOperator.None) && operationMenuItem.Operator == filterDescriptor1.Operator;
                        if (operationMenuItem.IsChecked)
                        {
                            radMenuItem.IsChecked = true;
                        }
                        radMenuItem.Items.Add((RadItem)operationMenuItem);
                    }
                }
                else
                {
                    RadFilterComposeMenuItem filterComposeMenuItem = new RadFilterComposeMenuItem();
                    filterComposeMenuItem.Text                      = filterOperation.Name;
                    filterComposeMenuItem.FilterDescriptor          = filterDescriptor1.Clone() as FilterDescriptor;
                    filterComposeMenuItem.FilterDescriptor.Operator = filterOperation.Operator;
                    filterComposeMenuItem.Click                    += new EventHandler(this.FilterMenuItem_Click);
                    filterComposeMenuItem.IsChecked                 = (filterDescriptor2 == null || filterDescriptor2.Operator == FilterOperator.None) && filterOperation.Operator == filterDescriptor1.Operator;
                    if (filterComposeMenuItem.IsChecked)
                    {
                        radMenuItem.IsChecked = true;
                    }
                    radMenuItem.Items.Add((RadItem)filterComposeMenuItem);
                }
            }
            if (GridViewHelper.IsNumeric(filteringDataType) || (object)filteringDataType == (object)typeof(DateTime))
            {
                RadFilterComposeMenuItem filterComposeMenuItem1 = new RadFilterComposeMenuItem("FilterFunctionsBetween");
                filterComposeMenuItem1.IsChecked = filterDescriptor2 != null && filterDescriptor2.Operator != FilterOperator.None && descriptorType == CompositeFilterDescriptor.DescriptorType.Between;
                if (filterComposeMenuItem1.IsChecked)
                {
                    radMenuItem.IsChecked = true;
                }
                filterComposeMenuItem1.FilterDescriptor = (FilterDescriptor)this.GetCompositeFilterDescriptor(CompositeFilterDescriptor.DescriptorType.Between, filterDescriptor2);
                filterComposeMenuItem1.Click           += new EventHandler(this.FilterMenuItem_Click);
                radMenuItem.Items.Add((RadItem)filterComposeMenuItem1);
                RadFilterComposeMenuItem filterComposeMenuItem2 = new RadFilterComposeMenuItem("FilterFunctionNotBetween");
                filterComposeMenuItem2.IsChecked = descriptorType == CompositeFilterDescriptor.DescriptorType.NotBetween;
                if (filterComposeMenuItem2.IsChecked)
                {
                    radMenuItem.IsChecked = true;
                }
                filterComposeMenuItem2.FilterDescriptor = (FilterDescriptor)this.GetCompositeFilterDescriptor(CompositeFilterDescriptor.DescriptorType.NotBetween, filterDescriptor2);
                filterComposeMenuItem2.Click           += new EventHandler(this.FilterMenuItem_Click);
                radMenuItem.Items.Add((RadItem)filterComposeMenuItem2);
            }
            if ((object)filteringDataType == (object)typeof(Image))
            {
                return;
            }
            RadFilterComposeMenuItem filterComposeMenuItem3 = new RadFilterComposeMenuItem("FilterFunctionsCustom");

            filterComposeMenuItem3.FilterDescriptor = filterDescriptor1.Clone() as FilterDescriptor;
            filterComposeMenuItem3.Click           += new EventHandler(this.FilterMenuItem_Click);
            filterComposeMenuItem3.IsChecked        = filterDescriptor2 != null && filterDescriptor2.Operator != FilterOperator.None && descriptorType == CompositeFilterDescriptor.DescriptorType.Unknown;
            if (filterComposeMenuItem3.IsChecked)
            {
                radMenuItem.IsChecked = true;
            }
            radMenuItem.Items.Add((RadItem)filterComposeMenuItem3);
        }
示例#10
0
 public CompositeFilterDescriptor ConvertTo(
     CompositeFilterDescriptor.DescriptorType type,
     Type dataType)
 {
     return(CompositeFilterDescriptor.ConvertDescriptor(this, type, dataType));
 }
示例#11
0
 public CompositeFilterDescriptor ConvertTo(
     CompositeFilterDescriptor.DescriptorType type)
 {
     return(CompositeFilterDescriptor.ConvertDescriptor(this, type, (Type)null));
 }