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); }
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)); }
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); }
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(); }
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); }
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); }
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); }
public CompositeFilterDescriptor ConvertTo( CompositeFilterDescriptor.DescriptorType type, Type dataType) { return(CompositeFilterDescriptor.ConvertDescriptor(this, type, dataType)); }
public CompositeFilterDescriptor ConvertTo( CompositeFilterDescriptor.DescriptorType type) { return(CompositeFilterDescriptor.ConvertDescriptor(this, type, (Type)null)); }