2

在我的 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();

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

有任何想法吗?

4

3 回答 3

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;
    }

这应该可以解决问题(好吧,经过几天的咒骂,它对我们有用)

于 2009-10-09T20:48:40.137 回答
3

您是否在数据网格上将 Horizo​​ntalScrollPolicy 设置为 false?

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

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

于 2009-08-19T22:29:18.613 回答
0

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

于 2009-08-23T20:46:41.910 回答