2009-08-17 82 views
2

在我的Flex應用程序中,我將列的寬度和可見性存儲在xml文件中。當應用程序加載它從XML文件讀取和設置他列中的值適用:Flex DataGrid列寬

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(); 

的問題似乎是設置可見(它正確設置可見字段,但食堂的寬度)...我在設置寬度(循環外部)和循環之前,我們試圖設置它。如果我沒有對可見性做任何事情,它會正確調整列的大小。

任何想法?

回答

6

在類文件的頂部添加import語句:

進口mx.core.mx_internal;

然後刪除使用mx_internal命名,刪除列的所有者,改變寬度,然後reasign父:

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

這應該做的伎倆(當然,它爲我們做了一對夫婦後發誓的日子)

+0

首先,感謝您的大力幫助.. 但通過這個解決方案,我能夠解決問題,當我第一次創建一個數據網格,但是當我調整列的大小,最後一列需要額外的寬度,即使我在datagrid的「columnStretch」事件之後調用了該函數。 請幫我... – 2013-04-05 05:53:43

0

我能得到它通過調用函數中的上述循環兩次工作... ...在第一時間將其添加可見列,第二次它設置正確的寬度。不是最好的解決方案,但我不能再花更多時間。

+0

你應該寫這個作爲評論的答案或編輯你的問題。不是一個實際的答案。我發現你的聲譽相當高,所以你可能已經知道這一點,但我認爲我會提到它。至少別人也會知道。 – 2012-08-08 13:46:29