自己总结三种Flex验证表格内容的方法
第一种:为想要验证的列里加上itemEditor组件,利用这个组件来实现校验
<mx:AdvancedDataGridColumn headerText="折扣" dataField="zk" width="60" labelFunction="zkLabFun" editorDataField="value">
<mx:itemEditor>
<fx:Component>
<mx:NumericStepper minimum="0.00" maximum="10.00" stepSize="0.01" focusAlpha="0"/>
</fx:Component>
</mx:itemEditor>
</mx:AdvancedDataGridColumn>
第二种:在表格中指定属性itemEditEnd="adgrid_itemEditEndHandler(event)"利用方法进行验证。
例如:
private function adgrid_itemEditEndHandler(event:AdvancedDataGridEvent):void{
if(event.reason == AdvancedDataGridEventReason.CANCELLED)
{
return;
}
if(event.dataField == "sl") {
var grid:AdvancedDataGrid = event.currentTarget as AdvancedDataGrid;
var editor:NumericStepper = grid.itemEditorInstance as NumericStepper;
var value:Number = editor.value;
var kc:Number = Number(grid.selectedItem.kc);
if(value > kc) {
event.preventDefault();
editor.errorString = "库存为"+kc+",不足取";
return;
}
}
}
第三种:推荐使用,处理的很巧妙。把验证的信息分出来,然后进行验证。贴出代码:
第一个文件:处理验证 // add by lqfalyas
<?xml version="1.0"?>
<!-- itemRenderers\validator\myComponents\EditorPhoneValidator.mxml -->
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" >
<mx:Script>
<![CDATA[
// Define a property for returning the new value to the cell.
[Bindable]
public var returnPN:String;
]]>
</mx:Script>
<mx:PhoneNumberValidator id="pnV" source="{newPN}" property="text" trigger="{newPN}" triggerEvent="change" required="true"/>
<mx:TextInput id="newPN"
text="{data.phone}"
updateComplete="returnPN=newPN.text;"
change="returnPN=newPN.text;"/>
</mx:VBox>
第二个文件——主文件
<!-- itemRenderers\validator\MainDGValidatorEditor.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
private var initDG:ArrayCollection = new ArrayCollection([
{name: 'Bob Jones', phone: '413-555-1212',
email: 'bjones@acme.com'},
{name: 'Sally Smith', phone: '617-555-5833',
email: 'ssmith@acme.com'},
]);
]]>
</mx:Script>
<mx:DataGrid id="dg"
width="500" height="200"
editable="true"
dataProvider="{initDG}">
<mx:columns>
<mx:DataGridColumn dataField="name" headerText="Name" />
<!--itemEditor制定验证的组件,上面定义,利用了绑定信息returnPN-->
<!-- editorDataField制定TextInput中的属性text,表格默认是TextInput,可以在上边组件中任意制定验证组件,比较灵活-->
<mx:DataGridColumn dataField="phone" headerText="Phone" itemEditor="myComponents.EditorPhoneValidator"
editorDataField="returnPN"/>
<mx:DataGridColumn dataField="email" headerText="Email" />
</mx:columns>
</mx:DataGrid>
</mx:Application>