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

发布于 2024-08-17 14:59:04 字数 144 浏览 13 评论 0原文

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

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

任何想法表示赞赏 谢谢

I want to save remotely (on a database) the state (visible columns, columns width and order) of a Flex3 DataGrid.

For width and visibility I can simply save them by accessing each column attribute.. ugly but possible..
But for the order? Do I have to create the dataGrid dynamically??

Any idea is appreciated
thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

万劫不复 2024-08-24 14:59:04

就我而言,我已按标题名称保存了订单(我假设您的 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
        }

In my case I have saved the order by header name (I'm making an assumption that your DataGrid always has the same columns and header names).

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

Then I can restore the column order by retrieving the ordered list of column headers, and swapping the position of columns in the datagrid as required.

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

I have defined a function moveColumnTo() to perform the switch.

        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
        }
感情旳空白 2024-08-24 14:59:04

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

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

Why can't you just save the order as you're looping through each column?

for(var i:int = 0; i < dataGrid.columns.size; i++)
{
    var column:DataGridColumn = dataGrid.columns[i];
    arr.push({column.visible, column.width, i});
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文