Group filter expression - grouping other filters (any that inherit from a7FitlerExprData, even other group filters) by set and/or clause. Is parsed by query builder
상속: FilterExpressionData, ICloneable
예제 #1
0
 private static FilterExpressionData fromXmlGroup(XElement xml)
 {
     eAndOrJoin andor = xml.AttributeAsString("Operator").ToEnum<eAndOrJoin>(eAndOrJoin.And);
     FltGroupExprData flt = new FltGroupExprData(andor);
     flt.Negate = xml.AttributeAsBool("Negate", false);
     foreach (var sub in xml.Elements())
     {
         flt.FilterExpressions.Add(FromXml(sub));
     }
     return flt;
 }
예제 #2
0
        public static FilterExpressionData GroupEqual(eAndOrJoin join, params string[] fieldValues)
        {
            var flt = new FltGroupExprData(join);
            string field = "";
            foreach (var fv in fieldValues)
            {
                if (field == "")
                {
                    field = fv;

                }
                else
                {
                    flt.FilterExpressions.Add(Filter.Equal(field, fv));
                    field = "";
                }
            }
            return flt;
        }
        public static FilterExpressionData ClearGroupFilter(FltGroupExprData groupFilter)
        {
            if (groupFilter.FilterExpressions.Count == 1)
                return groupFilter.FilterExpressions[0];

            for(int i = 0;i<groupFilter.FilterExpressions.Count;i++)
            {
                var gflt = groupFilter.FilterExpressions[i] as FltGroupExprData;
                groupFilter.FilterExpressions[i] = ClearGroupFilter(gflt);
            }
            return groupFilter;
        }
        private void addGroupSubFilter(FilterGroupEditor fge, bool fromRemove)
        {
            fge.Parent = this;
            FltGroupExprData fgeExpr = null;
            if (this.Filter is FltGroupExprData)
                fgeExpr = this.Filter as FltGroupExprData;
            else
            {
                if (JoinType.HasValue)
                {
                    fgeExpr = new FltGroupExprData(JoinType.Value);
                }
                else
                {
                    fgeExpr = new FltGroupExprData();
                }
                if (Parent != null && Parent.Filter != null)
                {
                    var parentGroup = Parent.Filter as FltGroupExprData;
                    parentGroup.FilterExpressions.Remove(this.Filter);
                    parentGroup.FilterExpressions.Add(fgeExpr);
                }
                this.Filter = fgeExpr;
            }
            fgeExpr.FilterExpressions.Add(fge.Filter);

            if (this.SubGroups.Count > 0 || this.AtomFilter != null )
            {
                bAdd.Visibility = Visibility.Visible;
                bAnd.Visibility = Visibility.Collapsed;
                bOr.Visibility = Visibility.Collapsed;
            }
            else
            {
                SetBackground(fge.MyBackgroundIndex + FilterEditor.BackgroundIndexStep);
                bAdd.Visibility = Visibility.Collapsed;
                bAnd.Visibility = Visibility.Visible;
                bOr.Visibility = Visibility.Visible;
            }

            if (JoinType.HasValue)
            {
                if (JoinType.Value == eAndOrJoin.And)
                {
                    miChangeToOr.Visibility = System.Windows.Visibility.Visible;
                    miChangeToAnd.Visibility = System.Windows.Visibility.Collapsed;
                }
                else
                {
                    miChangeToOr.Visibility = System.Windows.Visibility.Collapsed;
                    miChangeToAnd.Visibility = System.Windows.Visibility.Visible;
                }
            }
            else
            {
                miChangeToOr.Visibility = System.Windows.Visibility.Collapsed;
                miChangeToAnd.Visibility = System.Windows.Visibility.Collapsed;
            }

            if (!fromRemove && ( AddedFirstElement != null && this.Parent == null))
            {
                this.AddedFirstElement(this, null);
            }

            if (AtomFilter!=null) //replacing existing atomfilter with groupfilter containing the atomfilter
            {
                var newFge = new FilterGroupEditor(_collection, !_vertical, this.IsReadOnly, EditorContext, AtomFilter.Filter);
                fgeExpr.FilterExpressions.Add(AtomFilter.Filter);
                newFge.Parent = this;
                ccAtom.Content = null;
                newFge.SetAtomFilter(AtomFilter);
                AtomFilter = null;
                this.Negate(false);
                spSubGroups.Children.Add(newFge);
                SubGroups.Add(newFge);
            }

            if (SubGroups.Count>0 && JoinType.HasValue)
            {
                var andOrLabel = new Label()
                                     {
                                         Content = (JoinType.Value == eAndOrJoin.And) ? "And": "Or",
                                         VerticalAlignment = VerticalAlignment.Center,
                                         HorizontalAlignment = HorizontalAlignment.Center
                                     };
                spSubGroups.Children.Add(andOrLabel);
                fge.JoinLabelOnParent = andOrLabel;
                fgeExpr.AndOr = JoinType.Value;
            }
            SubGroups.Add(fge);
            spSubGroups.Children.Add(fge);
            if (fge.AtomFilter != null)
                fge.AtomFilter.FocusControl();
        }
 /// <summary>
 /// cloning the instance of this and all sub filters
 /// </summary>
 /// <returns></returns>
 public override FilterExpressionData Clone()
 {
     FltGroupExprData thisFg = this as FltGroupExprData;
     FltGroupExprData fg = new FltGroupExprData(thisFg.AndOr);
     fg.AndOr = thisFg.AndOr;
     fg.Negate = this.Negate;
     foreach (FilterExpressionData f in thisFg.FilterExpressions)
     {
         if(f!=null)
             fg.FilterExpressions.Add(f.Clone());
     }
     return fg;
 }