2010-11-02 100 views
0

如果用户移动它们并关闭窗口或注销,我想为用户保留AdvancedDataGrid列顺序。我有代码(见下文),当我将代码放入一个网格父容器时 - 例如,一个标题窗口。我想通过将代码放置在AdvancedDatagrid子类中而不是每个网格容器来概括功能,以便在保存/加载其选择时,我的所有网格都可以访问单个位置。我的方法是将数据字段名称和网格名称存储在数组中,并从共享对象中保存/读取/读取。并根据该订单更新列顺序。当我使用Advanced Datagrid子类中的代码但在网格父项中正常工作时,失败失败。任何人有任何想法?我一直敲我的头这2天:(invalidateList()在自定义子类触发时对AdvancedDataGrid不起作用

私有函数loadSettings(参数name:String = “自定义”):无效 {VAR gridName:字符串= this.stripUIDNumbers(this.uid); VAR温度:阵列=新的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 VAR使用“列”的getter/setter将保证您使用无效处理和。在继承的AdvancedDatagrid中设置并重置正确的标志......这是我要改变的第一件事(另外,当你在下一行设置列数组时,不需要splice(0)行)。

很好,这是我第二次改变......我首先要确保你的本地sharedObjects得到了输入,但这是我个人偏好的代码可读性。 Google“flash.net.registerClassAlias”或者用ValueObject类做一些事情,这样你就可以存储dataField命令,所以你不必为每个*做一个“。

希望至少有一点帮助。祝你好运。

+0

另外,你什么时候调用loadSettings()? – 2010-11-02 12:52:20

+0

感谢Jeremy的帮助。我应该早点回来。我最终不得不妥协妥协。我不得不将功能存储在一个包含文件中(用于20多个网格),并在网格所有者级别访问它,因为在mxml中定义的网格列属性设置似乎总是覆盖actionscript运行时更改,进一步定义网格祖先。 – BrianOJee 2011-02-15 10:42:35