protected override void RestoreStateCore(IDataGridContextVisitable dataGridContextVisitable)
        {
            try
            {
                m_rootDataGridContext = SaveRestoreDataGridContextStateVisitor.GetDataGridContextFromVisitable(dataGridContextVisitable);

                if (m_saveExpandedItems)
                {
                    for (int i = 0; i < m_itemsToExpand.Count; i++)
                    {
                        object dataItemToExpand = m_itemsToExpand[i].Target;

                        if (dataItemToExpand != null)
                        {
                            try
                            {
                                // Verify if we have a System.Data.DataView as ItemsSource to
                                // ensure to restore the System.Data.DataRowView that represents
                                // the System.Data.DataRow saved previously
                                System.Data.DataView dataView =
                                    ItemsSourceHelper.TryGetDataViewFromDataGridContext(m_rootDataGridContext);

                                if ((dataView != null) &&
                                    (dataItemToExpand is System.Data.DataRow))
                                {
                                    foreach (System.Data.DataRowView dataRowView in dataView)
                                    {
                                        if (dataRowView.Row == dataItemToExpand)
                                        {
                                            dataItemToExpand = dataRowView;
                                            break;
                                        }
                                    }
                                }

                                m_rootDataGridContext.ExpandDetails(dataItemToExpand);
                            }
                            catch
                            {
                                System.Diagnostics.Debug.Assert(false, "Item has moved in the source ?");
                            }
                        }
                    }
                }

                bool visitWasStopped;
                dataGridContextVisitable.AcceptVisitor(0, int.MaxValue, this, DataGridContextVisitorType.Groups, false, out visitWasStopped);
            }
            finally
            {
                m_itemsToExpand       = null;
                m_rootDataGridContext = null;
            }
        }
Example #2
0
        private void RecursiveSaveDataGridContextsState(DataGridContext dataGridContext)
        {
            var saveRestoreDataGridContextStateVisitor = new SaveRestoreDataGridContextStateVisitor(true, int.MaxValue, m_stopAtFirstCollapsedGroup);

            saveRestoreDataGridContextStateVisitor.SaveState(dataGridContext as IDataGridContextVisitable);

            m_dataGridContextsStateDictionary.Add(new WeakDataGridContextKey(dataGridContext), saveRestoreDataGridContextStateVisitor);

            foreach (var subDataGridContext in dataGridContext.GetChildContextsCore())
            {
                this.RecursiveSaveDataGridContextsState(subDataGridContext);
            }
        }
    private void RecursiveSaveDataGridContextsState( DataGridContext dataGridContext )
    {
      SaveRestoreDataGridContextStateVisitor saveRestoreDataGridContextStateVisitor
        = new SaveRestoreDataGridContextStateVisitor( true, int.MaxValue, m_stopAtFirstCollapsedGroup );

      saveRestoreDataGridContextStateVisitor.SaveState( dataGridContext as IDataGridContextVisitable );

      m_dataGridContextsStateDictionary.Add( new WeakDataGridContextKey( dataGridContext ), saveRestoreDataGridContextStateVisitor );

      IEnumerable<DataGridContext> subDataGridContexts = dataGridContext.GetChildContexts();

      foreach( DataGridContext subDataGridContext in subDataGridContexts )
      {
        this.RecursiveSaveDataGridContextsState( subDataGridContext );
      }
    }
Example #4
0
    internal void SaveDataGridContextState( DataGridContext dataGridContext, bool handleExpandedItems, int maxGroupLevel )
    {
      if( dataGridContext == null )
        throw new ArgumentNullException( "dataGridContext" );

      Debug.Assert( !dataGridContext.IsRestoringState );

      if( dataGridContext.IsSavingState )
        return;

      dataGridContext.IsSavingState = true;

      try
      {
        WeakDataGridContextKey weakDataGridContextKey = new WeakDataGridContextKey( dataGridContext );

        if( m_dataGridContextsStateDictionary == null )
        {
          m_dataGridContextsStateDictionary = new Dictionary<WeakDataGridContextKey, SaveRestoreDataGridContextStateVisitor>();
        }
        else if( m_dataGridContextsStateDictionary.ContainsKey( weakDataGridContextKey ) )
        {
          // Already a state saved for this context.  Don't overwrite it.
          Debug.WriteLineIf( this.DebugSaveRestore, "Already a state saved for WeakDataGridContextKey: " + weakDataGridContextKey.GetHashCode().ToString() );
          return;
        }

        SaveRestoreDataGridContextStateVisitor saveRestoreDataGridContextStateVisitor = new SaveRestoreDataGridContextStateVisitor( handleExpandedItems, maxGroupLevel, false );

        try
        {
          saveRestoreDataGridContextStateVisitor.SaveState( ( IDataGridContextVisitable )dataGridContext );

          m_dataGridContextsStateDictionary.Add( weakDataGridContextKey, saveRestoreDataGridContextStateVisitor );

          Debug.WriteLineIf( this.DebugSaveRestore, "SAVING DataGridContext state for WeakDataGridContextKey: " + weakDataGridContextKey.GetHashCode().ToString() + " SAVED!" );
        }
        catch
        {
          Debug.WriteLineIf( this.DebugSaveRestore, "SAVING DataGridContext state for WeakDataGridContextKey: " + weakDataGridContextKey.GetHashCode().ToString() + " FAILED!" );
        }
      }
      finally
      {
        dataGridContext.IsSavingState = false;
      }
    }