protected override void SendToInner()
        {
            bool peerOuterGroupProcessing = base.m_odpContext.PeerOuterGroupProcessing;

            base.m_dataRegionDef.RuntimeDataRegionObj = base.m_selfReference;
            int num = (this.m_outerGroupings != null) ? this.m_outerGroupings.Length : 0;
            AggregateRowInfo aggregateRowInfo = AggregateRowInfo.CreateAndSaveAggregateInfo(base.m_odpContext);

            if (base.m_dataRegionDef.IsMatrixIDC)
            {
                if (this.m_innerGroupings != null)
                {
                    this.ProcessInnerHierarchy(aggregateRowInfo);
                }
                for (int i = 0; i < num; i++)
                {
                    this.ProcessOuterHierarchy(aggregateRowInfo, i);
                }
            }
            else
            {
                if (num == 0)
                {
                    if (this.m_innerGroupings != null)
                    {
                        this.ProcessInnerHierarchy(aggregateRowInfo);
                    }
                }
                else
                {
                    if (this.m_innerGroupsWithCellsForOuterPeerGroupProcessing == null || !peerOuterGroupProcessing)
                    {
                        this.m_innerGroupsWithCellsForOuterPeerGroupProcessing = new List <IReference <RuntimeDataTablixGroupLeafObj> >();
                    }
                    for (int j = 0; j < num; j++)
                    {
                        this.ProcessOuterHierarchy(aggregateRowInfo, j);
                        if (this.m_innerGroupings != null)
                        {
                            if (j == 0)
                            {
                                this.ProcessInnerHierarchy(aggregateRowInfo);
                            }
                            else
                            {
                                foreach (IReference <RuntimeDataTablixGroupLeafObj> item in this.m_innerGroupsWithCellsForOuterPeerGroupProcessing)
                                {
                                    using (item.PinValue())
                                    {
                                        item.Value().PeerOuterGroupProcessCells();
                                    }
                                    aggregateRowInfo.RestoreAggregateInfo(base.m_odpContext);
                                }
                            }
                        }
                    }
                }
                base.m_odpContext.PeerOuterGroupProcessing = peerOuterGroupProcessing;
            }
        }
        public void FirstPassNextDataRow(OnDemandProcessingContext odpContext)
        {
            AggregateRowInfo aggregateRowInfo = AggregateRowInfo.CreateAndSaveAggregateInfo(odpContext);

            for (int i = 0; i < this.m_dataRegionObjs.Count; i++)
            {
                RuntimeDataRegionObjReference runtimeDataRegionObjReference = this.m_dataRegionObjs[i];
                if ((BaseReference)runtimeDataRegionObjReference != (object)null)
                {
                    using (runtimeDataRegionObjReference.PinValue())
                    {
                        runtimeDataRegionObjReference.Value().NextRow();
                    }
                    aggregateRowInfo.RestoreAggregateInfo(odpContext);
                }
            }
        }