public virtual object Evaluate(IHierarchicalRow row)
        {
            string summaryExpression = this.GetSummaryExpression();

            if (string.IsNullOrEmpty(summaryExpression))
            {
                return((object)null);
            }
            object obj = (object)null;
            GridViewGroupRowInfo viewGroupRowInfo = row as GridViewGroupRowInfo;

            if (viewGroupRowInfo != null)
            {
                return(viewGroupRowInfo.Group.Evaluate(summaryExpression));
            }
            GridViewHierarchyRowInfo hierarchyRowInfo = row as GridViewHierarchyRowInfo;

            if (hierarchyRowInfo != null)
            {
                return(hierarchyRowInfo.ActiveView.Evaluate(summaryExpression, (IEnumerable <GridViewRowInfo>)hierarchyRowInfo.ActiveView.ChildRows));
            }
            GridViewTemplate gridViewTemplate = row as GridViewTemplate;

            if (gridViewTemplate != null)
            {
                return(gridViewTemplate.DataView.Evaluate(summaryExpression, 0, gridViewTemplate.DataView.Count));
            }
            return(obj);
        }
Example #2
0
 public GridTraverser(GridTraverser gridTraverser)
 {
     this.rootRow        = gridTraverser.hierarchyRow;
     this.hierarchyRow   = gridTraverser.hierarchyRow;
     this.mode           = gridTraverser.mode;
     this.overDetailsRow = gridTraverser.overDetailsRow;
     if (gridTraverser.traverser is ViewInfoTraverser)
     {
         this.traverser = (ITraverser <GridViewRowInfo>) new ViewInfoTraverser((ViewInfoTraverser.ViewInfoEnumeratorPosition)gridTraverser.traverser.Position);
     }
     else
     {
         if (!(gridTraverser.traverser is HierarchyRowTraverser))
         {
             return;
         }
         if (this.hierarchyRow is GridViewGroupRowInfo)
         {
             this.traverser = (ITraverser <GridViewRowInfo>) new GroupRowTraverser((HierarchyRowTraverser.HierarchyRowTraverserPosition)gridTraverser.traverser.Position);
         }
         else
         {
             this.traverser = (ITraverser <GridViewRowInfo>) new HierarchyRowTraverser((HierarchyRowTraverser.HierarchyRowTraverserPosition)gridTraverser.traverser.Position);
         }
     }
 }
        protected virtual bool IsLastChildRow(IHierarchicalRow parent, GridViewRowInfo row)
        {
            ITraverser <GridViewRowInfo> traverser = this.GetTraverser(parent);

            traverser.MoveToEnd();
            return(traverser.Current == row);
        }
Example #4
0
 public GridTraverser(GridViewInfo viewInfo, GridTraverser.TraversalModes type)
 {
     this.mode         = type;
     this.hierarchyRow = viewInfo.ParentRow == null ? (IHierarchicalRow)viewInfo.ViewTemplate : (IHierarchicalRow)viewInfo.ParentRow;
     this.rootRow      = this.hierarchyRow;
     this.viewInfo     = viewInfo;
     this.Reset();
 }
Example #5
0
 public T FindParent <T>() where T : IHierarchicalRow
 {
     for (IHierarchicalRow parent = this.Parent; parent != null; parent = parent.Parent)
     {
         if (parent is T)
         {
             return((T)parent);
         }
     }
     return(default(T));
 }
        protected ITraverser <GridViewRowInfo> GetTraverser(
            IHierarchicalRow hierarchicalRow)
        {
            GridViewRowInfo hierarchyRow = hierarchicalRow as GridViewRowInfo;

            if (hierarchyRow != null)
            {
                return((ITraverser <GridViewRowInfo>) new HierarchyRowTraverser(hierarchyRow));
            }
            return((ITraverser <GridViewRowInfo>) new GridTraverser(hierarchicalRow));
        }
Example #7
0
 public GridTraverserPosition(
     IHierarchicalRow rootRow,
     IHierarchicalRow hierarchyRow,
     object position,
     bool overDetailsRow,
     GridTraverser.TraversalModes mode)
 {
     this.rootRow        = rootRow;
     this.hierarchyRow   = hierarchyRow;
     this.position       = position;
     this.overDetailsRow = overDetailsRow;
     this.mode           = mode;
 }
 public GroupSummaryEvaluationEventArgs(
     object value,
     DataGroup group,
     string formatString,
     GridViewSummaryItem summaryItem,
     IHierarchicalRow parent,
     object context)
 {
     this.formatString = formatString;
     this.group        = group;
     this.value        = value;
     this.summaryItem  = summaryItem;
     this.parent       = parent;
     this.context      = context;
 }
Example #9
0
 private void StepInHierarchyBackward()
 {
     while (this.CanStepInHierarchy())
     {
         GridViewHierarchyRowInfo current = this.traverser.Current as GridViewHierarchyRowInfo;
         if (current != null && !this.processHierarchy && !this.IsSelfReference(current))
         {
             this.overDetailsRow = true;
             break;
         }
         this.hierarchyRow = (IHierarchicalRow)this.traverser.Current;
         this.hierarchyTraversers.Push(this.traverser);
         this.CreateTraverser();
         this.traverser.MoveToEnd();
     }
 }
Example #10
0
        private bool StepOutOfHierarchy()
        {
            GridViewHierarchyRowInfo hierarchyRow1 = this.hierarchyRow as GridViewHierarchyRowInfo;

            if (this.hierarchyRow is GridViewGroupRowInfo || this.hierarchyRow.HasChildViews || this.processHierarchy && (this.hierarchyRow.Parent != null || this.hierarchyRow is GridViewHierarchyRowInfo))
            {
                IHierarchicalRow hierarchyRow2 = this.hierarchyRow;
                this.oldRowIsGroupRow = hierarchyRow2 is GridViewGroupRowInfo;
                this.hierarchyRow     = this.hierarchyRow.Parent;
                GridViewInfo gridViewInfo = this.Current != null ? this.Current.ViewInfo : (GridViewInfo)null;
                bool         flag         = this.Current is GridViewHierarchyRowInfo;
                if (this.hierarchyRow == null)
                {
                    this.hierarchyRow = this.rootRow;
                }
                if (this.hierarchyTraversers.Count > 0)
                {
                    ITraverser <GridViewRowInfo> traverser = this.hierarchyTraversers.Pop();
                    traverser.MovePrevious();
                    traverser.MovePrevious();
                    for (int index = 0; index < 5; ++index)
                    {
                        traverser.MoveNext();
                        if (traverser.Current == hierarchyRow2)
                        {
                            this.traverser = traverser;
                            return(this.ProcessHierarchy || hierarchyRow1 == null || (hierarchyRow1.ViewTemplate.Templates.Count <= 0 || !hierarchyRow1.ViewTemplate.IsSelfReference) || (gridViewInfo == null || hierarchyRow1.ViewTemplate == gridViewInfo.ViewTemplate) && (flag || hierarchyRow1 != this.rootRow));
                        }
                    }
                }
                this.CreateTraverser();
                while (this.traverser.MoveNext())
                {
                    if (this.traverser.Current == hierarchyRow2)
                    {
                        return(this.ProcessHierarchy || hierarchyRow1 == null || (hierarchyRow1.ViewTemplate.Templates.Count <= 0 || !hierarchyRow1.ViewTemplate.IsSelfReference) || (gridViewInfo == null || hierarchyRow1.ViewTemplate == gridViewInfo.ViewTemplate) && (flag || hierarchyRow1 != this.rootRow));
                    }
                }
            }
            return(false);
        }
Example #11
0
        private GridViewRowInfo GetNext(GridViewRowInfo row)
        {
            IHierarchicalRow current1 = (IHierarchicalRow)row;
            IHierarchicalRow parent1  = row.Parent ?? (IHierarchicalRow)row.ViewTemplate;
            Stack <GridViewRowCollection.Navigator> navigatorStack = new Stack <GridViewRowCollection.Navigator>();

            GridViewRowCollection.Navigator navigator1 = new GridViewRowCollection.Navigator(parent1, current1);
            navigatorStack.Push(navigator1);
            while (navigatorStack.Count > 0)
            {
                GridViewRowCollection.Navigator navigator2 = navigatorStack.Pop();
                IHierarchicalRow parent2  = navigator2.Parent;
                IHierarchicalRow current2 = navigator2.Current;
                if (parent2 == null)
                {
                    return((GridViewRowInfo)null);
                }
                if (parent2.ChildRows.Count > 1)
                {
                    int num = parent2.ChildRows.IndexOf((GridViewRowInfo)current2);
                    if (num == parent2.ChildRows.Count - 1)
                    {
                        return((GridViewRowInfo)null);
                    }
                    GridViewGroupRowInfo viewGroupRowInfo = parent2.ChildRows[num + 1] as GridViewGroupRowInfo;
                    if (viewGroupRowInfo == null)
                    {
                        return(parent2.ChildRows[num + 1]);
                    }
                    while (viewGroupRowInfo.Group.Groups.Count > 0)
                    {
                        viewGroupRowInfo = viewGroupRowInfo.Group.Groups[0].GroupRow;
                    }
                    return(viewGroupRowInfo.Group[0]);
                }
                GridViewRowCollection.Navigator navigator3 = new GridViewRowCollection.Navigator(parent2.Parent, parent2);
                navigatorStack.Push(navigator3);
            }
            return((GridViewRowInfo)null);
        }
 private bool MovePreviousCore()
 {
     if (this.position.Index == 0 && this.position.Parent != null && this.position.Parent.Parent != null)
     {
         IHierarchicalRow parent = this.position.Parent.Parent;
         this.position.Index  = parent.ChildRows.IndexOf((GridViewRowInfo)this.position.Parent);
         this.position.Parent = parent;
         this.current         = this.position.Parent.ChildRows[this.position.Index];
         return(true);
     }
     if (this.position.Index > 0)
     {
         --this.position.Index;
         for (this.current = this.position.Parent.ChildRows[this.position.Index]; this.OnStepInHierarchy(this.current); this.current = this.position.Parent.ChildRows[this.position.Index])
         {
             this.position.Parent = (IHierarchicalRow)this.current;
             this.position.Index  = this.position.Parent.ChildRows.Count - 1;
         }
         return(true);
     }
     this.position.Index = -1;
     return(false);
 }
Example #13
0
 private bool StepInHierarchy()
 {
     if (this.overDetailsRow)
     {
         this.overDetailsRow = false;
     }
     else if (this.CanStepInHierarchy())
     {
         GridViewHierarchyRowInfo current = this.traverser.Current as GridViewHierarchyRowInfo;
         if (current != null && !this.processHierarchy && !this.IsSelfReference(current))
         {
             this.overDetailsRow = true;
             return(true);
         }
         if (this.traverser.Current != null)
         {
             this.hierarchyRow = (IHierarchicalRow)this.traverser.Current;
             this.hierarchyTraversers.Push(this.traverser);
             this.CreateTraverser();
         }
     }
     return(false);
 }
Example #14
0
        private GridViewRowInfo GetPrev(GridViewRowInfo row)
        {
            IHierarchicalRow         hierarchicalRow1     = (IHierarchicalRow)row;
            IHierarchicalRow         hierarchicalRow2     = row.Parent ?? (IHierarchicalRow)row.ViewTemplate;
            Stack <IHierarchicalRow> hierarchicalRowStack = new Stack <IHierarchicalRow>();

            hierarchicalRowStack.Push(hierarchicalRow2);
            while (hierarchicalRowStack.Count > 0)
            {
                IHierarchicalRow hierarchicalRow3 = hierarchicalRowStack.Pop();
                if (hierarchicalRow3 == null)
                {
                    return((GridViewRowInfo)null);
                }
                if (hierarchicalRow3.ChildRows.Count > 1)
                {
                    int num = hierarchicalRow3.ChildRows.IndexOf((GridViewRowInfo)hierarchicalRow1);
                    if (num == 0)
                    {
                        return((GridViewRowInfo)null);
                    }
                    GridViewGroupRowInfo viewGroupRowInfo = hierarchicalRow3.ChildRows[num - 1] as GridViewGroupRowInfo;
                    if (viewGroupRowInfo == null)
                    {
                        return(hierarchicalRow3.ChildRows[num - 1]);
                    }
                    while (viewGroupRowInfo.Group.Groups.Count > 0)
                    {
                        viewGroupRowInfo = viewGroupRowInfo.Group.Groups[viewGroupRowInfo.Group.Groups.Count - 1].GroupRow;
                    }
                    return(viewGroupRowInfo.Group[viewGroupRowInfo.Group.ItemCount - 1]);
                }
                hierarchicalRow1 = hierarchicalRow3;
                hierarchicalRowStack.Push(hierarchicalRow3.Parent);
            }
            return((GridViewRowInfo)null);
        }
Example #15
0
        private bool MoveNextCore()
        {
            if (this.traverser == null)
            {
                return(false);
            }
            IHierarchicalRow             hierarchyRow = this.hierarchyRow;
            ITraverser <GridViewRowInfo> traverser    = this.traverser;

            if (this.StepInHierarchy())
            {
                return(true);
            }
            while (!this.traverser.MoveNext())
            {
                if (!this.StepOutOfHierarchy())
                {
                    this.hierarchyRow = hierarchyRow;
                    this.traverser    = traverser;
                    return(false);
                }
            }
            return(true);
        }
Example #16
0
 public Navigator(IHierarchicalRow parent, IHierarchicalRow current)
 {
     this.Parent  = parent;
     this.Current = current;
 }
Example #17
0
 public void Reset()
 {
     this.hierarchyRow = this.rootRow;
     this.hierarchyTraversers.Clear();
     this.CreateTraverser(this.viewInfo);
 }
 public EnumeratorPosition(
     GridViewRowInfoEnumerator.EnumeratorPosition position)
 {
     this.parent = position.parent;
     this.index  = position.index;
 }
 public EnumeratorPosition(IHierarchicalRow parent, int index)
 {
     this.parent = parent;
     this.index  = index;
 }
 public GridViewRowInfoEnumerator(IHierarchicalRow startPosition)
 {
     this.start    = startPosition;
     this.position = new GridViewRowInfoEnumerator.EnumeratorPosition(this.start, -1);
 }
Example #21
0
 public GridTraverser(IHierarchicalRow hierarchyRow)
 {
     this.rootRow      = hierarchyRow;
     this.hierarchyRow = hierarchyRow;
     this.Reset();
 }