flex4中利用itemEditEnd事件修改DataGrid的值时候,使用itemEditEnd事件,但是当使用this.dg.dataProvider;获得修改后的值时候,第一次总是得到未修改的值,用Alert调试后,发现只有第一次是未修改的值,之后都是已修改的值,后来采用this.dg.itemEditorInstance;后还是一样,求大神解释代码 <mx:DataGrid x="10" y="0" id="dg" editable="true" itemEditEnd="dg_upda(event)" >事件代码
protected function dg_update(event:DataGridEvent):void
{



var ll:Object = this.dg.dataProvider;

var o:Office =ll[event.rowIndex];

Alert.show(this.dg.selectedItem.valueOf());
ofbiz.update(o);

ofbiz.findAll();
}flexdatagrid

解决方案 »

  1.   

    楼主你好:
    用Mx:DataGrid 的 itemFocusOut方法取代itemEditEnd 方法就行了,贴一段我的代码(现在行了)
    但是存在一个问题:弹出窗口的个数令我很烦,失焦一次怎么会弹出两个窗口(如果点击另一行则会不断的弹出窗口),我也想问一个问题:     能不能限制编辑数据的类型,比如说只能输入数字;----------------------------------------------------------------------------------<?xml version="1.0" encoding="utf-8"?>
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
       xmlns:s="library://ns.adobe.com/flex/spark"
       xmlns:mx="library://ns.adobe.com/flex/mx"
       minWidth="955" minHeight="600">
    <fx:Declarations>
    </fx:Declarations>
    <fx:Script>
    <![CDATA[
    import mx.controls.Alert;
    import mx.events.DataGridEvent;
    [Bindable]
    private var dp:Array=
    [{name:"James",salary:3000},
    {name:"Bosh",salary:255},
    {name:"Vade",salary:200}];
    private function getInfo(e:DataGridEvent):void{
    var sal:int=e.target.selectedItem.salary;
    Alert.show(sal+"");
    }
    ]]>
    </fx:Script>
      <s:Panel width="100%" height="100%">
    <s:HGroup width="100%" height="50%">
    <mx:DataGrid id="dg" width="100%" height="100%" dataProvider="{dp}" editable="true"
     itemFocusOut="getInfo(event)">
    <mx:columns>
    <mx:DataGridColumn editable="false" dataField="name" headerText="姓名"/>
      <mx:DataGridColumn editable="true" dataField="salary" headerText="薪水">
    </mx:DataGridColumn>
    </mx:columns>
    </mx:DataGrid>
    </s:HGroup>
    </s:Panel>
    </s:Application>
    ------------------------------------------------------------------------------------