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

Posted

技术标签:

【中文标题】Flex3 中数据网格上的关键事件【英文标题】:Key events on data grid in Flex3 【发布时间】:2011-08-05 09:32:42 【问题描述】:

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

【问题讨论】:

【参考方案1】:

使用回车事件发送数据 我的要求我将以下内容用于更新过程(我认为您也期望相同)

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

<mx:DataGrid id="datagrid2" dataProvider="cat"  editable="true"  keyDown="gridkey(event)"   x="10" y="152"  visible="true" >
            <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());

                        

                    

                

【讨论】:

谢谢@ConquistadorAravinth,现在它可以正常工作了。非常感谢您的帮助。 是的!:-) @Naveen Kumar Pavuturi【参考方案2】:

我认为你应该使用事件 itemEditEnd 详情可以在

找到

DataGrid Events

一个有用的例子是

Creating an editable DataGrid control in Flex

希望有帮助

【讨论】:

谢谢@Imran 和@Jason Towne。是的,我在父组件是面板的 Datagrid 中使用了 itemEditor。当用户单击文本输入框时,我调用 focusIn 函数并将数据存储到临时变量中,当用户输入数据并单击外部时,我调用 focusOut 函数。 在这个函数中检查数据是否改变,如果输入的数据与以前不同,那么我正在调用相关的网络服务。现在,我添加了 itemEditEnd 函数来接受用户键盘事件。它工作正常,但是当用户更改数据并在面板外单击时,没有发生任何操作。 这里,如果用户输入无效数据,我想保留以前的数据。 当用户输入错误的数据并在数据网格之外点击时,不会生成任何事件并且错误的数据会保留在文本输入中。 您可以为此目的使用“有效”和“无效”事件【参考方案3】:

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

这是一个粗略的例子:

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

【讨论】:

以上是关于Flex3 中数据网格上的关键事件的主要内容,如果未能解决你的问题,请参考以下文章

Flex3 Datagrid:标志上的自定义行

从关键字搜索中突出显示数据网格上的所有匹配字符串/子字符串

flex 3 数据网格:如果 == 0 则隐藏值并在布尔值上显示复选框

UI线程上的.NET引发事件[重复]

如何从子表单刷新父表单上的数据网格

是否有可能看到我在C#WPF中按下数据网格上的向下箭头如何将事件绑定到该?