自己总结三种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>

posted @ 2010-11-23 09:34  lqfalya  阅读(1517)  评论(0编辑  收藏  举报