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

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

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

任何想法都值得赞赏 谢谢

【问题讨论】:

  • 您是在谈论多个数据网格的排列顺序吗?还是列的排序顺序?
  • 列的顺序,表示标题(不是每列的排序)

标签: apache-flex actionscript-3 serialization datagrid flex3


【解决方案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,我如何知道用户是否切换了两列?
    猜你喜欢
    • 2015-01-27
    • 2012-09-07
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 2010-12-23
    • 2018-12-20
    • 1970-01-01
    相关资源
    最近更新 更多