保存数据网格的状态:可见列、列宽和顺序

Posted

技术标签:

【中文标题】保存数据网格的状态:可见列、列宽和顺序【英文标题】:save state of a dataGrid: visible columns, columns width and order 【发布时间】:2011-01-03 18:21:44 【问题描述】:

我想远程(在数据库上)保存 Flex3 DataGrid 的状态(可见列、列宽和顺序)。

对于宽度和可见性,我可以通过访问每个列属性来简单地保存它们.. 丑陋但可能.. 但是为了订单?我必须动态创建dataGrid吗??

任何想法都值得赞赏 谢谢

【问题讨论】:

您是在谈论多个数据网格的排列顺序吗?还是列的排序顺序? 列的顺序,表示标题(不是每列的排序) 【参考方案1】:

在我的例子中,我已经按标题名称保存了订单(我假设您的 DataGrid 始终具有相同的列和标题名称)。

        for (var n:Number = 0; n< datagrid.columns.length; n++)
        
            var thiscol:DataGridColumn = DataGridColumn(datagrid.columns[n]);
            colArray.addItem(thiscol.headerText);
        

然后我可以通过检索列标题的有序列表并根据需要交换列在数据网格中的位置来恢复列顺序。

        for (var n:Number = 0; n < colArray.length; n++)
        
            moveColumnTo(String(colArray.getItemAt(n)), n);
        

我已经定义了一个函数 moveColumnTo() 来执行切换。

        private function moveColumnTo(columnName:String, columnIndex:Number):void
        
            // Find current column position
            var i:Number = -1;
            for (var n:Number = 0; n < datagrid.columns.length; n++)
            
                if (DataGridColumn(datagrid.columns[n]).headerText == columnName)
                
                    i = n;
                    break;
                
            

            if (i == -1 || i == columnIndex) return; // Don't shift column

            this.mx_internal::shiftColumns(i, columnIndex); // Shift column to required position
        

【讨论】:

【参考方案2】:

为什么不能在循环遍历每一列时保存订单?

for(var i:int = 0; i < dataGrid.columns.size; i++)

    var column:DataGridColumn = dataGrid.columns[i];
    arr.push(column.visible, column.width, i);

【讨论】:

mmm.. 不清楚我是如何在那里保存订单的... 'i' 变量只是增加了 1,我如何知道用户是否切换了两列?

以上是关于保存数据网格的状态:可见列、列宽和顺序的主要内容,如果未能解决你的问题,请参考以下文章

css网格可变列宽和换行

请教:android gridlayout 如何设置列宽和行高?

extjs 有状态网格删除排序

在 kendo-ui 网格中显示/隐藏列后,有啥方法可以自动调整网格列宽?

如何获取数据库中保存状态的数据表可见列索引

绑定数据网格列宽