自定义子类触发时,invalidateList()不适用于AdvancedDataGrid

时间:2010-11-02 10:28:07

标签: flex flex3 flex-datagrid

如果用户移动它们并关闭窗口或注销,我希望为用户保留AdvancedDataGrid列顺序。我有代码(见下文),当我将代码放在网格父容器中时 - 例如,标题窗口。我想通过将代码放在AdvancedDatagrid子类而不是每个网格容器中来概括功能,以便在保存/加载选择时我的所有网格都可以访问单个位置。我的方法是将数据域名称和网格名称存储在一个数组中,并保存/读取共享对象。并根据该订单更新列顺序。当我使用Advanced Datagrid子类中的代码但在网格父级中正常工作时,invaldation失败。有人有任何想法吗?香港专业教育学院2天来一直在反对这一点:(

private function loadSettings(name:String =“custom”):void         {             var gridName:String = this.stripUIDNumbers(this.uid);             var temp:Array = new 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");
        }

1 个答案:

答案 0 :(得分:0)

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

嗯,这是我要改变的第二件事......我首先要确保你的本地sharedObjects被输入,但这是我个人喜欢的代码可读性。 Google“flash.net.registerClassAlias”或使用ValueObject类执行某些操作,以便您可以存储dataField顺序,这样就不必为“每个*”执行操作。

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