Flex DataGrid 中的校验和TAB建问题
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" width="100%" height="100%">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.validators.NumberValidator;
import mx.events.AdvancedDataGridEvent;
import flash.events.MouseEvent;
import mx.events.FlexEvent;
import mx.events.CollectionEvent;
import com.adobe.serialization.json.JSON;
import mx.rpc.events.ResultEvent;
import mx.managers.CursorManager;
import mx.rpc.events.FaultEvent;
import mx.events.PropertyChangeEvent;
import mx.events.CollectionEventKind;
import mx.controls.Alert;
import mx.controls.TextInput;
// import keyEvent.MyKeyEvent;
import flash.events.KeyboardEvent;
[Bindable]
private var dataSource:ArrayCollection = new ArrayCollection([
{xh:'1'},
{tjfl:'车间'},{tjfl:'外协'},{tjfl:'小计'},
{xh:'2'},
{tjfl:'车间'},{tjfl:'外协'},{tjfl:'小计'},
{xh:'3'},
{tjfl:'车间'},{tjfl:'外协'},{tjfl:'小计'},
{xh:'4'},
{tjfl:'车间'},{tjfl:'外协'},{tjfl:'小计'},
{cpbh:'总计'},
{tjfl:'车间'},{tjfl:'外协'},{tjfl:'小计'},
]);
private function checkIt(myEvent:Event):void
{
dg1.invalidateList();
}
private var nv:NumberValidator;
//This gets fired when the itemEditor is about to be destroyed. As a result of hitting enter, tab, or mouse clicking away.
private function onEditEnd(event:AdvancedDataGridEvent):void
{
var dataField:String = event.dataField;
var fCell:Array=[event.columnIndex,event.rowIndex];
//This tells us what the new data is about to be before it's committed.
var newData:String = TextInput(event.currentTarget.itemEditorInstance).text;
if((newData == null || newData == " ") && (dataField == 'cpgs' || dataField == 'xggs' || dataField == 'gzgs' || dataField == 'qtgs' || dataField == 'hj' || dataField == 'hbgs')){
newData="0";
TextInput(event.currentTarget.itemEditorInstance).text = "0";
}
nv = new NumberValidator();
if(dataField == 'cpgs' || dataField == 'xggs' || dataField == 'gzgs' || dataField == 'qtgs' || dataField == 'hj' || dataField == 'hbgs')
{
var val:* ;
nv.source = event.currentTarget.itemEditorInstance;
nv.property = "text";
nv.domain = "real";
nv.required = false;
nv.invalidCharError = "必须输入数字!";
val = nv.validate();
if(val.type == "invalid")
{
event.preventDefault();
if(newData.length!=0)
callLater(maintainEdit,fCell);
}
else
{
callLater(maintainFocus);
}
}
else{
callLater(maintainFocus);
}
}
//this checks to see if we're still in edit mode, and if we're not..invoke it
private function maintainEdit(colIndex:int,rowIndex:int):void
{
var editCell:Object = {columnIndex:colIndex, rowIndex: rowIndex};
if(dg1.editedItemPosition==null)
{
//This will invoke the datagrid's itemEditBegin
dg1.editedItemPosition = editCell;
callLater(validateCurrentEditor);
}
}
private function validateCurrentEditor():void
{
if(dg1.itemEditorInstance!=null)
{
nv.source = dg1.itemEditorInstance;
nv.validate();
}
}
//prevents enter/tab from moving onto the next cell after finishing editing.
private function maintainFocus():void
{
dg1.editedItemPosition = null;
}
]]>
</mx:Script>
<mx:Canvas verticalScrollBarStyleName="hh" height="100%" width="80%" horizontalCenter="0" verticalCenter="0" verticalScrollPolicy="auto">
<mx:AdvancedDataGrid id="dg1" designViewDataType="flat" sortExpertMode="true" sortableColumns="false" selectionMode="singleRow"
dataProvider="{dataSource}" height="492" width="95%" fontSize="14" fontFamily="Times New Roman" editable="true"
enabled="true" y="70" horizontalScrollPolicy="auto" verticalScrollPolicy="auto" itemEditEnd="onEditEnd(event)"
>
<mx:groupedColumns>
<mx:AdvancedDataGridColumn headerText="编号" dataField="id" width="100" textAlign="center" visible="false"/>
<mx:AdvancedDataGridColumn headerText="序号" dataField="xh" width="50" textAlign="center" editable="false" />
<mx:AdvancedDataGridColumn headerText="产品编号" dataField="cpbh" width="100" textAlign="center" />
<mx:AdvancedDataGridColumn headerText="统计分类" dataField="tjfl" width="80" editable="false" textAlign="center"/>
<mx:AdvancedDataGridColumnGroup headerText="工时统计" editable="false">
<mx:AdvancedDataGridColumn headerText="产品工时" dataField="cpgs" width="100" textAlign="center"/>
<mx:AdvancedDataGridColumn headerText="修改工时" dataField="xggs" width="100" textAlign="center"/>
<mx:AdvancedDataGridColumn headerText="后备工时" dataField="hbgs" width="120" textAlign="center"/>
<mx:AdvancedDataGridColumn headerText="工装工时" dataField="gzgs" width="120" textAlign="center"/>
<mx:AdvancedDataGridColumn headerText="其他工时" dataField="qtgs" width="120" textAlign="center"/>
<mx:AdvancedDataGridColumn headerText="合计" dataField="hj" width="100" textAlign="center" />
</mx:AdvancedDataGridColumnGroup>
</mx:groupedColumns>
</mx:AdvancedDataGrid>
</mx:Canvas>
</mx:Application>
实例代码如上,拷贝即可运行,问题是如何实现按一次TAB键后校验完成第一个单元格后定位在第二个单元格中,现在的效果是按完一次TAB键后同时校验了两个单元格并且失去焦点,希望高手指点,困扰我好久!