0

Flex アプリケーションで Datagrid を取得しました。

ヘッダー行を右クリックしたときにコンテキスト メニューを表示する必要があります。残りのデータグリッド項目 (データを含む項目) をクリックしたときに、後者のコンテキスト メニューが表示されないようにする必要があります。

編集:アプリケーションはAIR環境で実行されるため、フラッシュプレーヤーの問題はありません

4

3 に答える 3

0

マウスの右クリックについてはよくわかりません。cos flex アプリは Flash Player で実行され、右クリックするとメニューが表示されます。最善の策は、DatagRid で headerRelease イベントを使用することです。その後、イベント ハンドラーでメニューを作成し (おそらくポップアップまたはホバリング パネルで?)、そこで必要なことを実行できます。詳しくはこちら

編集:おそらく、contextMenu クラスを使用して、それを dataGrid.contextMenu にアタッチできますか?

于 2012-08-21T09:37:24.810 に答える
0

Flex では、より一般的には Flash では、右クリック イベントをキャッチする方法がありません。

于 2012-08-21T09:47:36.817 に答える
0

以下のコードはあなたを助けるかもしれません: -

ITEM を 1 つだけ追加したサンプルを作成しました。必要に応じて、変換してロジックを変更できます。私の考えは、基本ロジックの 1 つを提供することです。あなたはより良い解決策を得るかもしれませんが、これはあなたのために働くことができます.

   <?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
               >
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>

    <s:layout>
        <s:VerticalLayout/>
    </s:layout>

    <mx:DataGrid id="myDG" width="350"> 
        <mx:dataProvider>
            <mx:ArrayCollection>
                <mx:source>
                    <fx:Object Artist="" Price="11.99" 
                               Album="Slanted and Enchanted" />
                    <fx:Object Artist="" 
                               Album="Brighten the Corners" Price="11.99" />
                </mx:source>
            </mx:ArrayCollection>
        </mx:dataProvider>
        <mx:columns>
            <mx:DataGridColumn dataField="Artist" headerRenderer="StackLabelRenderer"/>
            <mx:DataGridColumn dataField="Album" headerRenderer="StackLabelRenderer"/>
            <mx:DataGridColumn id="price" dataField="Price" headerRenderer="StackLabelRenderer"/>
        </mx:columns>
    </mx:DataGrid>

</s:Application>

StackLabelRenderer.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Label xmlns:fx="http://ns.adobe.com/mxml/2009" 
          xmlns:s="library://ns.adobe.com/flex/spark" 
          xmlns:mx="library://ns.adobe.com/flex/mx"
          click="dispatchClickEvent()">

    <fx:Script>
        <![CDATA[
            import mx.controls.DataGrid;
            import mx.controls.dataGridClasses.DataGridColumn;
            import mx.controls.dataGridClasses.DataGridListData;
            import mx.core.mx_internal;

            private function dispatchClickEvent():void
            {
                trace("Item Clicked")
            }

            import mx.controls.Alert;

            [Bindable]
            private var cm:ContextMenu;

            override protected function createChildren():void
            {
                    cm = new ContextMenu();
                    cm.hideBuiltInItems();
                    cm.addEventListener(ContextMenuEvent.MENU_SELECT, contextMenu_menuSelect);
                    this.contextMenu = cm;
            }

            private function contextMenu_menuSelect(evt:ContextMenuEvent):void {
                //condition to check length of column data length
                var allNull:Boolean=true;
                var columnName:String = DataGridColumn(data).headerText;
                for each(var o:Object in DataGrid(owner).dataProvider) {
                    if(o[columnName] != "") {
                        allNull=false;
                        break;
                    }
                }
                if(!allNull)
                {
                    var cmi:ContextMenuItem = new ContextMenuItem("First Element...", true);
                    cmi.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, contextMenuItem_menuItemSelect);
                    cm.customItems = [cmi];
                }
            }

            private function contextMenuItem_menuItemSelect(evt:ContextMenuEvent):void {
            }
        ]]>
    </fx:Script>
</mx:Label>
于 2012-08-21T10:46:45.053 に答える