Flex DataGrid列宽

时间:2009-08-17 19:32:39

标签: flex datagrid column-width

在我的flex应用程序中,我将列的宽度和可见性存储在xml文件中。当应用程序加载时,它会从xml文件中读取并根据需要设置列值:

for(i = 0; i < columnsOrder.length; i++){
    newOrder[i] = myDG.columns[Number(columnsOrder[i]) - 1];
    newOrder[i].visible = (Number(columnsVisiblity[i]) == 1);
    newOrder[i].width = Number(columnsWidth[i]);
}
myDG.columns = newOrder;
myDG.invalidateList();

问题似乎是设置可见性(它正确设置可见字段但是会弄乱宽度)...我在设置宽度(循环外部)之后和循环之前尝试设置它。如果我不对可见性做任何事情,它会正确调整列的大小。

有什么想法吗?

3 个答案:

答案 0 :(得分:6)

在类文件的顶部添加import语句:

导入mx.core.mx_internal;

然后使用mx_internal命名空间删除,删除列的所有者,更改宽度,然后重新设置父级:

public static function resizeColumn(col:DataGridColumn, size:int):void
    {
        var owner:* = col.mx_internal::owner
        col.mx_internal::owner = null;

        col.width = size;

        col.mx_internal::owner = owner;
    }

这应该做的伎俩(好吧,它经过几天的咒骂后为我们做了)

答案 1 :(得分:3)

您在datagrid上将horizo​​ntalScrollPolicy设置为false吗?

“如果DataGrid的horizo​​ntalScrollPolicy属性为false,则所有可见列必须适合可显示区域,并且如果列的总宽度对于可显示的太小或太大,则DataGrid将不会始终遵循列的宽度区域。”

http://livedocs.adobe.com/flex/3/langref/mx/controls/dataGridClasses/DataGridColumn.html#width

答案 2 :(得分:0)

我能够通过在函数中调用上面的循环两次来使它工作......第一次添加可见列时,第二次设置正确的宽度。不是最好的解决方案,但我不能再花费更多时间了。