private void CleanDetailNode( DetailGeneratorNode detailNode )
    {
#if LOG
      Log.Start( this, "CleanDetailNode - DN" + detailNode.GetHashCode().ToString() );
#endif

      m_dataGridControl.SelectionChangerManager.Begin();

      try
      {
        m_dataGridControl.SelectionChangerManager.UnselectAllItems( detailNode.DetailContext );
        m_dataGridControl.SelectionChangerManager.UnselectAllCells( detailNode.DetailContext );
      }
      finally
      {
        m_dataGridControl.SelectionChangerManager.End( false, false, false );
      }

      m_dataGridControl.SaveDataGridContextState( detailNode.DetailContext, true, int.MaxValue );

      CustomItemContainerGenerator generator = detailNode.DetailGenerator;

      detailNode.CleanGeneratorNode();

      DetailsChangedEventManager.RemoveListener( generator, this );
      generator.ItemsChanged -= HandleDetailGeneratorContentChanged;
      generator.ContainersRemoved -= OnDetailContainersRemoved;
      generator.SetGenPosToIndexUpdateInhibiter( null );

#if LOG
      Log.End( this, "CleanDetailNode - DN" + detailNode.GetHashCode().ToString() );
#endif
    }