在我的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();
问题似乎是设置可见性(它正确设置可见字段但是会弄乱宽度)...我在设置宽度(循环外部)之后和循环之前尝试设置它。如果我不对可见性做任何事情,它会正确调整列的大小。
有什么想法吗?
答案 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上将horizontalScrollPolicy设置为false吗?
“如果DataGrid的horizontalScrollPolicy属性为false,则所有可见列必须适合可显示区域,并且如果列的总宽度对于可显示的太小或太大,则DataGrid将不会始终遵循列的宽度区域。”
http://livedocs.adobe.com/flex/3/langref/mx/controls/dataGridClasses/DataGridColumn.html#width
答案 2 :(得分:0)
我能够通过在函数中调用上面的循环两次来使它工作......第一次添加可见列时,第二次设置正确的宽度。不是最好的解决方案,但我不能再花费更多时间了。