Flex3中数据网格上的关键事件

时间:2011-04-14 09:39:46

标签: actionscript-3 flex datagrid flex3

我在Flex3工作。这里我有一个包含数据的数据网格。某些列是可编辑的。当用户更改列数据时,将调用Web服务。这里使用focusOut的功能,我通过focusOut函数发送来自datagrid的数据来调用Web服务。现在,我想在用户更改列数据并按下键盘键'Enter'时调用Web服务。在这里我可以调用函数,但事件不会将datagrid的数据传递给被调用的函数。有人给我解决方案。谢谢。

3 个答案:

答案 0 :(得分:1)

使用enter事件发送数据 我的要求我使用以下内容进行更新过程(我认为你也期待同样的事情)

检查代码..希望这会有用......

<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());

                        }

                    }

                }

答案 1 :(得分:0)

您可以使用enter上的itemEditor事件将数据发送到您的网络服务。

这是一个粗略的例子:

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

答案 2 :(得分:0)

我认为你应该使用Event itemEditEnd 详情请见

DataGrid Events

一个有用的例子是

Creating an editable DataGrid control in Flex

希望有所帮助