2

私は flex advancedDataGrid を持っています (メタ列ヘッダーが好きですが、それがうまく機能する場合は dataGrid を使用できます)、選択した行の上にコンポーネントのポップアップを表示したいと考えています。

問題は、画面上の位置を取得するために、(データプロバイダーの項目ではなく) データグリッドの実際にレンダリングされた行を参照する方法を理解できることです。

データグリッドの「行」にアクセスする方法、または少なくともその位置を取得する方法について理論を持っている人はいますか?

乾杯

4

3 に答える 3

1

最終的に、親ドキュメントを参照するアイテムレンダーでこれを実行しました。基本的に、クリックすると、アイテムレンダラーは、それ自体への参照を使用して親の関数を呼び出します。

その時点で、親ドキュメントはどのセルが選択されているかを認識しており、そのx、y座標を決定するためにいくつかの操作を行いました。

public function showPopup(selectedItemRenderer:UIComponent):void {
        selectedCell = selectedItemRenderer;

        PopUpManager.removePopUp(editPopup);

        editPopup.height = dg.rowHeight;

        BindingUtils.bindProperty(editPopup, "width", dg, "width");

        editPopup.setStyle("backgroundColor", 0xFF0000);
        if(selectedCell != null) {
            editPopup.x = selectedCell.localToGlobal(new Point(0,0)).x - 1;
            editPopup.y = selectedCell.localToGlobal(new Point(0,0)).y - 1;
        }

        PopUpManager.addPopUp(editPopup, DisplayObject(Application.application));

    }

<mx:DataGrid id="dg" width="500" height="100%"
    dataProvider="{dummyData2}">
<mx:columns>        
    <mx:DataGridColumn
        width="60">
        <mx:itemRenderer>
            <mx:Component>
                <mx:HBox>
                    <mx:Button label="edit" click="{parentDocument.showPopup(this)}" />
                </mx:HBox>                          
            </mx:Component>
        </mx:itemRenderer>
    </mx:DataGridColumn>
    <mx:DataGridColumn 
        dataField="Category">
    </mx:DataGridColumn>     
</mx:columns>

于 2010-04-17T00:04:35.027 に答える
1

dataGridColumn で幅プロパティを使用し、幅を合計して x 位置を取得しましたが、lockColumnCount を使用すると、プログラムが x を正しく認識しません。

于 2011-10-14T17:00:41.483 に答える
0

データグリッドの x、y 位置を取得する簡単な方法は、キャンバス内にデータグリッドをラップし、キャンバスの mouseX と mouseY をキャプチャしようとすることです。必要に応じて、localToGlobal メソッドを使用できます。

于 2010-03-08T18:06:10.140 に答える