2

私のフレックスアプリでは、列の幅と可視性を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

関数で上記のループを2回呼び出すことで、これを機能させることができました... 1回目は表示されている列を追加し、2回目は正しい幅を設定します。最善の解決策ではありませんが、これ以上時間を費やすことはできません。

于 2009-08-23T20:46:41.910 に答える