问题描述
|
我正在Flex3中工作。在这里,我有一个包含数据的数据网格。有些列是可编辑的。用户更改时,将调用列数据Web服务。在这里,使用focusOut函数,我通过通过focusOut函数发送来自datagrid的数据来调用Web服务。现在,我想在用户更改列数据并按键盘键'Enter \'时调用Web服务。在这里,我可以调用函数,但是该事件不会将datagrid的数据携带到所调用的函数中。有人给我解决方案。谢谢。
解决方法
使用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());
}
}
}
,您可以在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>
,我认为您应该使用Event itemEditEnd
可以在下面找到详细信息
DataGrid事件
一个有用的例子是
在Flex中创建可编辑的DataGrid控件
希望能有所帮助