2011-03-11 64 views
3

我想在AdvancedDataGrid中使用Spark DropDownList作爲itemEditor。 Howerver,我無意中發現了兩個問題:Spark DropDownList作爲AdvancedDataGrid內itemEditor的問題

  1. 點擊在DropDownList一個項目改變了ADG選定行。您可以通過編譯下面的代碼並執行以下步驟來查看此行爲。

    • 打開通過從 「A」 到 「C」 和行3行點擊 「A」 1
    • 選擇 「C」 用鼠標

    值變化DropDownList的是在助理總幹事中選定的行。它看起來像DropDownList中的鼠標單擊也由ADG本身處理,ADG本身相應地更改所選行。我找不出預防這種情況的方法。預期的行爲是在DropDownList關閉後仍然選擇第1行。

  2. 單擊DropDownList的滾動條關閉DropDownList。 (我只是找到了解決這個問題的relatated問題在寫這篇:Scrollbars in dropdownlist inside DataGrid itemEditor not working

應用

<?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"> 

    <s:layout> 
     <s:VerticalLayout horizontalAlign="center" verticalAlign="middle"/> 
    </s:layout> 

    <fx:Script> 
     <![CDATA[ 
      import mx.collections.ArrayCollection; 

      [Bindable] 
      private var myDataProvider:ArrayCollection = new ArrayCollection([ 
       {label: "Row 1", value: "A"}, 
       {label: "Row 2", value: "B"}, 
       {label: "Row 3", value: "C"}, 
       {label: "Row 4", value: "D"}, 
       ]); 
     ]]> 
    </fx:Script> 

    <mx:AdvancedDataGrid dataProvider="{myDataProvider}" editable="true"> 
     <mx:columns> 
      <mx:AdvancedDataGridColumn headerText="Label" dataField="label" width="150"/> 
      <mx:AdvancedDataGridColumn headerText="Value" dataField="value" width="200" editorDataField="selectedItem" 
             itemEditor="DropDownListEditor"/> 
     </mx:columns> 
    </mx:AdvancedDataGrid> 
</s:Application> 

的itemEditor

​​

回答

3

感謝ed我現在發現了一個似乎工作得很好的解決方案。 DropDownList使用MOUSE_DOWN事件來關閉dropDown。所以,當MOUSE_UP事件被觸發時,dropDown不再存在。這就是爲什麼ADG收到MOUSE_UP事件並更改所選行。

我現在使用的是自定義DropDownList,在此處我關閉了dropDown之後的第一個MOUSE_UP事件。到目前爲止,這工作沒有問題。

protected override function dropDownController_closeHandler(event:DropDownEvent):void 
{ 
    systemManager.getSandboxRoot().addEventListener(MouseEvent.MOUSE_UP, systemManager_mouseUpHandler, true); 
    super.dropDownController_closeHandler(event); 
} 

protected function systemManager_mouseUpHandler(event:MouseEvent):void 
{ 
    systemManager.getSandboxRoot().removeEventListener(MouseEvent.MOUSE_UP, systemManager_mouseUpHandler, true); 
    event.stopImmediatePropagation(); 
} 
+0

Greate有幫助。 – comphilip 2014-11-05 10:00:16

3

我已經看到了這個問題了。 我的修復是爲DropDownEvent.CLOSE添加一個事件偵聽器到AdvancedDataGrid的子類(您必須確保您的編輯器正確地調度此事件)。

一旦你有了,你可以防止ADG mouseUpHandler觸發,並自己處理endEdit調用。

+0

感謝您的提示!我不想改變助理總幹事的職位,所以我再次看到所有被解僱的事件。既然你提到了ADG的'mouseUpHandler',這是找到解決方案的好起點(請參閱我自己的答案)。 – 2011-03-18 08:50:09