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 中数据网格上的关键事件的主要内容,如果未能解决你的问题,请参考以下文章