internal static AggregateRowInfo CreateAndSaveAggregateInfo(OnDemandProcessingContext odpContext)
        {
            AggregateRowInfo aggregateRowInfo = new AggregateRowInfo();

            aggregateRowInfo.SaveAggregateInfo(odpContext);
            return(aggregateRowInfo);
        }
        protected override void SendToInner()
        {
            bool peerOuterGroupProcessing = m_odpContext.PeerOuterGroupProcessing;

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

            if (m_dataRegionDef.IsMatrixIDC)
            {
                if (m_innerGroupings != null)
                {
                    ProcessInnerHierarchy(aggregateRowInfo);
                }
                for (int i = 0; i < num; i++)
                {
                    ProcessOuterHierarchy(aggregateRowInfo, i);
                }
                return;
            }
            if (num == 0)
            {
                if (m_innerGroupings != null)
                {
                    ProcessInnerHierarchy(aggregateRowInfo);
                }
            }
            else
            {
                if (m_innerGroupsWithCellsForOuterPeerGroupProcessing == null || !peerOuterGroupProcessing)
                {
                    m_innerGroupsWithCellsForOuterPeerGroupProcessing = new List <IReference <RuntimeDataTablixGroupLeafObj> >();
                }
                for (int j = 0; j < num; j++)
                {
                    ProcessOuterHierarchy(aggregateRowInfo, j);
                    if (m_innerGroupings == null)
                    {
                        continue;
                    }
                    if (j == 0)
                    {
                        ProcessInnerHierarchy(aggregateRowInfo);
                        continue;
                    }
                    foreach (IReference <RuntimeDataTablixGroupLeafObj> item in m_innerGroupsWithCellsForOuterPeerGroupProcessing)
                    {
                        using (item.PinValue())
                        {
                            item.Value().PeerOuterGroupProcessCells();
                        }
                        aggregateRowInfo.RestoreAggregateInfo(m_odpContext);
                    }
                }
            }
            m_odpContext.PeerOuterGroupProcessing = peerOuterGroupProcessing;
        }
 private void ProcessInnerHierarchy(AggregateRowInfo aggregateRowInfo)
 {
     for (int i = 0; i < m_innerGroupings.Length; i++)
     {
         IReference <RuntimeMemberObj> reference = m_innerGroupings[i];
         using (reference.PinValue())
         {
             reference.Value().NextRow(isOuterGrouping: false, m_odpContext);
         }
         aggregateRowInfo.RestoreAggregateInfo(m_odpContext);
     }
 }
        private void ProcessOuterHierarchy(AggregateRowInfo aggregateRowInfo, int outerGroupingIndex)
        {
            m_odpContext.PeerOuterGroupProcessing = (outerGroupingIndex != 0);
            m_dataRegionDef.ResetOuterGroupingIndexesForOuterPeerGroup(0);
            m_dataRegionDef.ResetOuterGroupingAggregateRowInfo();
            m_dataRegionDef.SetDataTablixAggregateRowInfo(aggregateRowInfo);
            IReference <RuntimeMemberObj> reference = m_outerGroupings[outerGroupingIndex];

            using (reference.PinValue())
            {
                reference.Value().NextRow(isOuterGrouping: true, m_odpContext);
            }
            aggregateRowInfo.RestoreAggregateInfo(m_odpContext);
        }
        internal void FirstPassNextDataRow(OnDemandProcessingContext odpContext)
        {
            AggregateRowInfo aggregateRowInfo = AggregateRowInfo.CreateAndSaveAggregateInfo(odpContext);

            for (int i = 0; i < m_dataRegionObjs.Count; i++)
            {
                RuntimeDataRegionObjReference runtimeDataRegionObjReference = m_dataRegionObjs[i];
                if (runtimeDataRegionObjReference != null)
                {
                    using (runtimeDataRegionObjReference.PinValue())
                    {
                        runtimeDataRegionObjReference.Value().NextRow();
                    }
                    aggregateRowInfo.RestoreAggregateInfo(odpContext);
                }
            }
        }
        internal void CombineAggregateInfo(OnDemandProcessingContext odpContext, AggregateRowInfo updated)
        {
            FieldsImpl fieldsImpl = odpContext.ReportObjectModel.FieldsImpl;

            if (updated == null)
            {
                fieldsImpl.ValidAggregateRow = false;
                return;
            }
            if (!updated.m_validAggregateRow)
            {
                fieldsImpl.ValidAggregateRow = false;
            }
            for (int i = 0; i < fieldsImpl.Count; i++)
            {
                if (updated.m_aggregationFieldChecked[i])
                {
                    fieldsImpl.ConsumeAggregationField(i);
                }
            }
        }
Пример #7
0
 internal override void SaveAggregateInfo(OnDemandProcessingContext odpContext)
 {
     m_aggregateInfo = new AggregateRowInfo();
     m_aggregateInfo.SaveAggregateInfo(odpContext);
 }