2010-11-02 2 views
0

Я хочу сохранить порядок столбцов AdvancedDataGrid для пользователя, если они перемещают их и закрывают окно или выходят из системы. У меня есть код (см. Ниже), который работает, когда я помещаю код в родительский контейнер сетки - например, окно заголовка. Я хотел бы обобщить функциональность, поместив код в подкласс AdvancedDatagrid, а не каждый контейнер сетки, чтобы все мои сетки имели доступ к одному месту при сохранении/загрузке их вариантов. Мой подход заключается в том, чтобы хранить имена полей данных и имя сетки в массиве и сохранять/читать в/из общего объекта. и обновить порядок столбцов на основе этого порядка. Invalidation терпит неудачу, когда я использую код в подклассе Advanced Datagrid, но отлично работает в родительском элементе. У кого-нибудь есть идеи? ив стучали голову против этого в течение 2-х дней :(invalidateList() не работает для AdvancedDataGrid при запуске пользовательским подклассом

частной функция loadSettings (имя: String = "обычай"): пустота { вара gridName: String = this.stripUIDNumbers (this.uid); вар темп : Array = новый массив,

 this.wsColOrder = SharedObject.getLocal(sharedObjectName); 
     if (wsColOrder.size > 0) 
     { 
      for each (var item:* in wsColOrder.data) 
      { 
       if (item is Array && item.indexOf(gridName) != -1) // check for the current grid 
       { 
        for each (var saveColDataField:String in item) 
        { 
         for each (var existingCol:AdvancedDataGridColumn in this._columns) 
         { 
          if (existingCol.dataField == saveColDataField) 
          { 
           temp.push(existingCol); 
          } 
         } 
        } 
        this._columns.splice(0); // clean out the existing colum array 
        this._columns = temp // assign persisted col order 
        this.invalidateList(); // update the grid 
       } 
      } 
     } 
     else 
     { 
      // saveSettings("default"); 
     } 

ответ

0

на первый взгляд, я бы спросить, почему вы используете _columns вар Использование геттер «столбцов»/сеттер будет гарантировать, что вы используете процесс недействительности и. правильные флаги устанавливаются и перезагружаются в вашем унаследованном AdvancedDatagrid ..... это первая вещь, которую я бы изменил. (также, строка splice (0) не нужна, когда вы устанавливаете массив колонок на следующей строке).

ХОРОШО, это вторая вещь, которую я бы изменил ... Сначала я должен убедиться, что ваши локальные sharedObjects набраны, но это личное предпочтение моей собственной читаемости кода. Google "flash.net.registerClassAlias" или сделать что-то со значением класса ValueObject, чтобы вы могли хранить заказ dataField, поэтому вам не нужно делать «для каждого *».

Надеюсь, что поможет хотя бы немного. Удачи.

+0

также, когда вы вызываете loadSettings()? –

+0

Спасибо Джереми за вашу помощь. Я должен был вернуться раньше. В конечном итоге мне пришлось пойти на компромисс. Я должен был сохранить функциональность в файле include (был использован в более чем 20 сетках) и получить доступ к нему на уровне владельца сетки, поскольку параметры атрибута grid col, определенные в mxml, всегда были переопределены изменениями времени выполнения actionscript, определяющими дальнейший путь к дочерней сетке. – BrianOJee