public override void ReadRow(DataActions dataAction, ITraversalContext context)
 {
     if (DataActions.UserSort == dataAction)
     {
         RuntimeDataRegionObj.CommonFirstRow(m_odpContext, ref m_firstRowIsAggregate, ref m_firstRow);
         CommonNextRow(m_dataRows);
         return;
     }
     if (DataActions.AggregatesOfAggregates == dataAction)
     {
         ((AggregateUpdateContext)context).UpdateAggregatesForRow();
         return;
     }
     if (FlagUtils.HasFlag(dataAction, DataActions.PostSortAggregatesOfAggregates))
     {
         ((AggregateUpdateContext)context).UpdateAggregatesForRow();
     }
     if (m_dataRegionDef.ProcessCellRunningValues)
     {
         return;
     }
     if (FlagUtils.HasFlag(dataAction, DataActions.PostSortAggregates))
     {
         if (m_postSortAggregates != null)
         {
             RuntimeDataRegionObj.UpdateAggregates(m_odpContext, m_postSortAggregates, updateAndSetup: false);
         }
         if (m_runningValues != null)
         {
             UpdateRunningValues(m_odpContext, m_runningValues);
         }
     }
     if (m_outerScope != null && (dataAction & m_outerDataAction) != 0)
     {
         using (m_outerScope.PinValue())
         {
             m_outerScope.Value().ReadRow(dataAction, context);
         }
     }
 }
 void IDataRowSortOwner.PostDataRowSortNextRow()
 {
     RuntimeDataRegionObj.CommonFirstRow(m_odpContext, ref m_firstRowIsAggregate, ref m_firstRow);
     ScopeNextNonAggregateRow(m_nonCustomAggregates, m_dataRows);
 }