2011-04-14 28 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