0

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

私有函数 loadSettings(name:String = "custom"):void { var gridName:String = this.stripUIDNumbers(this.uid); var temp: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");
        }
4

1 回答 1

0

乍一看,我会问你为什么使用 _columns var。使用“列”getter/setter 将保证您正在使用无效过程,并且在继承的 AdvancedDatagrid 中设置和重置正确的标志......这是我要改变的第一件事。(此外,当您在下一行设置 columns 数组时,不需要 splice(0) 行)。

好吧,这是我要改变的第二件事......我首先要确保您的本地 sharedObjects 被输入,但这是我自己的代码可读性的个人偏好。谷歌“flash.net.registerClassAlias”或对 ValueObject 类做一些事情,这样您就可以存储 dataField 顺序,这样您就不必为每个 * 做一个。

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

于 2010-11-02T12:51:35.393 回答