internal override void Cleanup()
 {
     if (m_tree != null)
     {
         m_tree.Dispose();
         m_tree = null;
     }
 }
 void IDataRowSortOwner.DataRowSortTraverse()
 {
     try
     {
         ITraversalContext traversalContext = new DataRowSortOwnerTraversalContext(this);
         m_sortedDataRowTree.Traverse(ProcessingStages.Grouping, m_dataRowSortExpression.Direction, traversalContext);
     }
     finally
     {
         m_inDataRowSortPhase = false;
         m_sortedDataRowTree.Dispose();
         m_sortedDataRowTree = null;
         m_dataRowSortExpression = null;
     }
 }