2011-04-14 26 views
2

我正在Flex3中工作。在這裏我有一個包含數據的數據網格。一些列是可編輯的。當用戶更改列數據時調用Web服務。在這裏使用focusOut函數,我通過focusOut函數發送來自datagrid的數據來調用Web服務。現在我想在用戶更改列數據並按下鍵盤按鍵'Enter'時調用Web服務。在這裏我可以調用函數,但事件不會將datagrid的數據傳遞給被調用的函數。有人給我解決這個問題。謝謝。Flex3中的數據網格上的關鍵事件

回答

1

使用輸入事件來發送數據 我的要求我用於更新過程如下(我想你也期待着人們SAME)

結帳CODE..hope這將有用....

<mx:DataGrid id="datagrid2" dataProvider="{cat}" editable="true" keyDown="gridkey(event)" x="10" y="152" visible="true" width="703"> 
      <mx:columns> 
      <!--<mx:DataGridColumn dataField="catCode" headerText="CATEGORY CODE" editable="false"/>-->   
        <mx:DataGridColumn dataField="catDesc" headerText="CATEGORY DESCRIPTION" editable="true"> 
        <mx:itemEditor > 

         <mx:Component> 

          <mx:TextInput errorColor="#0294b3" errorString="Click Enter and Save" restrict="A-Za-z0-9" maxChars="15"/> 
         </mx:Component> 
        </mx:itemEditor> 
        </mx:DataGridColumn> 

       <mx:DataGridColumn dataField="updatedate" headerText="LAST UPDATE DATE" editable="false"/> 

在動作腳本...使用以下

public function gridkey(event:KeyboardEvent):void 
      { 

       if (event.keyCode == Keyboard.ENTER) 
       { 
        var obj:Object = event.currentTarget.selectedItem; 

        for(var n:String in cat) 
        { 

         var items:CategoryVO = cat[n] as CategoryVO; 
         if(obj.catCode == items.catCode && obj.orgId == items.orgId) 
         { 

          items.catCode=obj.catCode; 
          items.catDesc=obj.catDesc; 
          items.updateby=obj.updateby; 
          items.alter = "Altered"; //use private var _alter:String; in flex VO class where remote class getters and settrs are used...// 
          //Alert.show(items.id.toString()); 
          DeletedItems.push(items.catCode); 
         // Alert.show(DeletedItems.toString()); 

         } 

        } 

       } 
+0

謝謝@ConquistadorAravinth,現在它的工作正常。我非常感謝你的幫助。 – 2011-04-20 05:14:40

+0

Yup!:-) @Naveen Kumar Pavuturi – ConquistadorAravinth 2011-04-20 07:20:01

0

您可以使用itemEditor上的enter事件將數據發送到您的Web服務。

這裏有一個粗略的例子:

<mx:itemEditor> 
    <mx:Component> 
    <mx:VBox> 
     <mx:TextInput id="setCity" width="130" text="{data.City}" enter="outerDocument.callMyWebService(data)"/> 
    </mx:VBox> 
    </mx:Component>     
</mx:itemEditor> 
0

我認爲你應該使用事件發生itemEditEnd 詳情可

DataGrid Events

一個有用的例子可以找到被

Creating an editable DataGrid control in Flex

希望幫助

+0

謝謝@ Imran和@Jason Towne。是的,我在其父組件是面板的Datagrid中使用了itemEditor。當用戶點擊文本輸入框,然後我調用focusIn函數並將數據存儲到一個臨時變量中,當用戶輸入數據並在外部單擊時,我將調用focusOut函數。 – 2011-04-15 10:09:17

+0

在這個函數中檢查數據是否改變,如果輸入的數據與前面的數據不一樣,那麼我正在調用相關的web服務。現在,我添加了itemEditEnd函數來接受用戶的鍵盤事件。它的工作正常,但是當用戶更改數據並在面板外單擊時,不會發生任何操作。 – 2011-04-15 10:11:27

+0

在這裏,如果用戶輸入無效數據,我想保留以前的數據。 – 2011-04-15 10:29:39