保存dataGrid的状态:可见列,列宽和顺序

时间:2010-01-11 13:23:41

标签: flex actionscript-3 serialization datagrid flex3

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

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

任何想法都表示赞赏 感谢

2 个答案:

答案 0 :(得分: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
        }

答案 1 :(得分:0)

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

for(var i:int = 0; i < dataGrid.columns.size; i++)
{
    var column:DataGridColumn = dataGrid.columns[i];
    arr.push({column.visible, column.width, i});
}