0

DataGrid の列のサイズを変更しようとすると、深刻な問題が発生します。私は1日以上それを続けてきましたが、起動するのに頭痛がして機知に富んでいます。

基本的に、内部に NavigatorContent の子を持つ TabNavigator コンポーネントがあります。NavigatorContent の子のそれぞれに、幅を 100% に設定する DataGrid があります (これは、ブラウザー ウィンドウのサイズ変更を処理できるようにするために必要です)。各タブの DataGrid としてIwo Banasの優れたフィルター可能な DataGrid を使用しています。

現在、各 DataGrid でいくつかの列を表示/非表示にしていますが、これは正常に機能しています。ただし、列幅が正しく設定されていないことがわかりました。(このコードを使用して) 列幅を設定するたびに、最近表示した列とそのすぐ左側の列を除いて、すべての列が正しい幅に設定されているように見えます。最近表示されたものは非常に小さく (幅を 30 に設定しましたが)、これらの列の左側にあるものは非常に大きくなっています (幅も 30 に設定しました)。

最初のDataGridは正常に動作するため、DataGridのライフサイクルに関係していると思います。他のタブをクリックすると、他の DataGrid の幅が正しく設定されていないことがわかります。

ただし、問題のある DataGrid の 1 つが「表示」され (つまり、画面に表示され)、列のサイズを変更するコードが再度実行されると、列のサイズは正しくなります。

以下にリストされている質問を含め、インターネット全体で推奨されている多くのことを試しましたが、役に立ちませんでした.

これは、列のサイズを変更するために使用しているコードです(この回答から取得)

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

ありとあらゆる助けをいただければ幸いです。

私はすでに次の答えを見てきました。 Flex DataGrid の列幅: 1 つの列ですべてを支配する? Flex 3 DataGrid の列幅 問題 Flex DataGrid の列幅(<-- この回答が最も近い) フレックス データグリッドで列幅を動的に変更できない

4

1 に答える 1

0

それで、膨大な量の頭を悩ませた後、私は最終的に解決策を見つけました(少なくとも私の問題に対して、それが他の誰かを助けるかどうかはわかりませんが、他の誰かを助けることができるかどうかわからないので、とにかくここに投稿すると思いました)。

DataGrid が画面上にあるときにサイズ変更コードを呼び出すと、それを行う必要があると判断しました。そこで、クリックしたタブに応じて、関連する DataGrid のサイズ変更コードを配置することを考えました。タブのクリック ハンドラーを実装する簡単な方法がないように見えたので、それほど簡単ではありません。私は簡単なグーグルを行い、この解決策を見つけました。

基本的に、各タブ ボタンのクリック ハンドラーを追加するには、タブ ナビゲーターの子を循環させ、ボタンを取得し、イベント リスナーを追加します。

次に、ハンドラーで必要なことを行います。

コード例 (ウェブサイトのものとは少し異なります):

        protected function tbGridArea_creationCompleteHandler(event:FlexEvent):void
        {
            for ( var i:int=0; i < tbGridArea.getChildren().length; i++ )
            {
                var tab:Object = tbGridArea.getTabAt(i);
                tab.addEventListener( FlexEvent.BUTTON_DOWN,myTabClickHandler );
            }
        }

        private function myTabClickHandler(event:Event):void {
            switch(event.currentTarget.label) {
            // do whatever you need to do here
            }
        }
于 2012-07-25T09:56:07.590 に答える