Flex アプリケーションで Datagrid を取得しました。
ヘッダー行を右クリックしたときにコンテキスト メニューを表示する必要があります。残りのデータグリッド項目 (データを含む項目) をクリックしたときに、後者のコンテキスト メニューが表示されないようにする必要があります。
編集:アプリケーションはAIR環境で実行されるため、フラッシュプレーヤーの問題はありません
Flex アプリケーションで Datagrid を取得しました。
ヘッダー行を右クリックしたときにコンテキスト メニューを表示する必要があります。残りのデータグリッド項目 (データを含む項目) をクリックしたときに、後者のコンテキスト メニューが表示されないようにする必要があります。
編集:アプリケーションはAIR環境で実行されるため、フラッシュプレーヤーの問題はありません
マウスの右クリックについてはよくわかりません。cos flex アプリは Flash Player で実行され、右クリックするとメニューが表示されます。最善の策は、DatagRid で headerRelease イベントを使用することです。その後、イベント ハンドラーでメニューを作成し (おそらくポップアップまたはホバリング パネルで?)、そこで必要なことを実行できます。詳しくはこちら
編集:おそらく、contextMenu クラスを使用して、それを dataGrid.contextMenu にアタッチできますか?
Flex では、より一般的には Flash では、右クリック イベントをキャッチする方法がありません。
以下のコードはあなたを助けるかもしれません: -
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>