Flex4之DataGrid增删改同步数据库及页面数据示例总结

Flex4之DataGrid增删改同步数据库及页面数据示例总结       
        分类:            Flex/Flash/AS3.0 1313人阅读 评论(0) 收藏 举报

有关Flex的DataGrid文章的确不少,都是零零碎碎的,目前还没有发现有个完整的例子供网友参考,这次我花了两天时间做了下Flex关于DataGrid一个指标数据管理系统,当然设计到的mxml会很多,大都是与DataGrid相关,我就抽取最常用的DataGrid的增删改同步数据库及页面数据来讲解

首先整理下思路,首先无论是删除还是修改,必须得获取当前行所在的记录,那么可以设置个全局变量,当DataGrid的itemClick事件出发时将选中的行赋给全局变量

[Bindable]public var acItemsSelected:Object;;

//事件方法

protected function myGrid_itemClickHandler(event:ListEvent):void
   {
    acItemsSelected = myGrid.selectedItem;
   }

这样的话就可以获得了当前选中的对象了

如果删除和修改的话,通常传到后台的肯定含有对象的ID项,那么这个ID是怎么获取的呢,通过acItemsSelected.xxxId能获取,那么这个xxxId必须是在DataGrid中有,设置为不显示就好了,例如我就是这么做的

<mx:DataGridColumn visible="false" dataField="targetCalId" />

这样的话,要更改的数据等都能通过ID传到后台查询相应对象更改删除了,接下来的事是比较重要的,如果光删除数据库是不行的,页面数据也要保持同步,关于dataGrid也没有好的刷新方法,所以你上网一搜,可能有的人会告诉你对于删除这样做:dataArray.removeItemAt(myGrid.selectedIndex);

增加这样做:dataArray.addItemAt(obj,0);

修改这样做:dataArray.setItemAt(obj,myGrid.selectedIndex);

这里说的dataArray是指的是DataGrid的DataProvider的值集合【当然肯定得声明称全局变量】

这样的写法呢可能你觉得,哎,是对的,其实不然,这并没有真正起到作用,对于FLEX来说缓存是相当大的,不行的话你通过这个修改行记录的属性后,再点这行记录的属性编辑页面发现值根本没改,所以所没有进行二次查询数据库了,利用的是缓存。即便是你调用了初始化查询数据库的那个方法,也是不行的,还是有缓存,最好的做法就是,抛弃上面的三种写法,只需要两步就可以实现刷新,第一初始化DataGrid的那个方法请求必须是URLRequest的,添加一个参数类似于

var u:URLVariables=new URLVariables("temp="+Math.random());

当然不一定非要是temp什么名字都行,然后在返回操作成功提示后调用这个初始化方法,你会发现真的起作用了。

其实建议关于URLRequest传参数的最好带上这个参数,也不费事,可以在很多场合下解决缓存不更新问题

说了这么多其实就是先做好个思想准备,理清思路,下面我就贴上我的一段代码

mxml文件

Xml代码 复制代码
  1. <SPAN style="FONT-SIZE: medium"><?xml version="1.0" encoding="utf-8"?> 
  2. <s:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009"   
  3.                xmlns:s="library://ns.adobe.com/flex/spark"   
  4.                xmlns:mx="library://ns.adobe.com/flex/mx" width="668" height="326"   
  5.                creationComplete="initComponent()"     
  6.                title="指标计量单位" 
  7.                fontSize="15" 
  8.                close="closeWindow()">    
  9.       
  10.     <s:layout> 
  11.         <s:VerticalLayout /> 
  12.     </s:layout> 
  13.     <fx:Declarations> 
  14.         <mx:StringValidator id="sval_1" source="{targetTypeName}" property="text"   
  15.                             tooShortError="字符串太短了,请输入最少4个字符. "   
  16.                             tooLongError="字符串太长了,请输入最长20个字符. "   
  17.                             minLength="4" maxLength="20"   
  18.                             trigger="{myButton}" triggerEvent="click"   
  19.                             /> 
  20.         <mx:StringValidator id="sval_2" source="{targetCal}" property="text"   
  21.                             tooShortError="字符串太短了,请输入最少4个字符. "   
  22.                             tooLongError="字符串太长了,请输入最长20个字符. "   
  23.                             minLength="4" maxLength="20"   
  24.                             trigger="{myButton}" triggerEvent="click"   
  25.                             /> 
  26.     </fx:Declarations> 
  27.       
  28.     <fx:Script> 
  29.         <![CDATA[
  30.             import com.adobe.serialization.json.JSON;
  31.             
  32.             import mx.collections.ArrayCollection;
  33.             import mx.controls.Alert;
  34.             import mx.events.CloseEvent;
  35.             import mx.events.ListEvent;
  36.             import mx.managers.PopUpManager;
  37.             import mx.rpc.events.ResultEvent;
  38.             import mx.utils.URLUtil;
  39.             import mx.validators.Validator;
  40.             
  41.             import org.osmf.utils.URL;  
  42.             [Bindable]public static var mainApp:DataCenterTargetPreserve = null;     
  43.             [Bindable]public var gsMyString:String;        
  44.             [Bindable]public var gnMyNumber:Number;        
  45.             [Bindable]public var acItemsSelected:Object;
  46.             [Bindable]
  47.             public var dataArray:ArrayCollection; 
  48.             
  49.             private function initComponent():void  
  50.             {  
  51.                 var u:URLVariables=new URLVariables("temp="+Math.random());
  52.                 var r:URLRequest=new URLRequest();
  53.                 r.data=u;
  54.                 r.method=URLRequestMethod.POST;
  55.                 r.url=mainApp.urls+"/findTargetCal.do";
  56.                 
  57.                 var l:URLLoader=new URLLoader();
  58.                 l.load(r);
  59.                 l.addEventListener(Event.COMPLETE, comp2);
  60.                 
  61.             }  
  62.             function comp2(e:Event):void
  63.             {
  64.                 var l:URLLoader=URLLoader(e.target);
  65.                 var array:Array=JSON.decode(String(l.data)) as Array;
  66.                 dataArray=new ArrayCollection(array);
  67.                 myGrid.dataProvider=dataArray;
  68.             } 
  69.             private function closeWindow():void  
  70.             {  
  71.                 PopUpManager.removePopUp(this);  
  72.             }//closeWindow  
  73.             private function showFinalSelection(oEvent:Event):void  
  74.             {  
  75.                 //mainApp.tiFinalSelection.text = oEvent.target.selectedItem.album;  
  76.             }//showFinalSelection  
  77.             protected function button1_clickHandler(event:MouseEvent):void
  78.             {
  79.                 PopUpManager.removePopUp(this);  
  80.                 
  81.             }
  82.             protected function button2_clickHandler(event:MouseEvent):void
  83.             {
  84.                 
  85.                 var all:Array=Validator.validateAll([sval_1,sval_2]);
  86.                 if(all.length==0){
  87.                 var v:URLVariables=new URLVariables("targetTypeName="+targetTypeName.text+"&targetCal="+targetCal.text+"&temp="+Math.random());
  88.                 var r:URLRequest=new URLRequest();
  89.                 r.url=mainApp.urls+"/addTargetCal.do";
  90.                 r.method=URLRequestMethod.POST;
  91.                 r.data=v;
  92.                 var l:URLLoader=new URLLoader();
  93.                 l.load(r);
  94.                 l.addEventListener(Event.COMPLETE,comp);
  95.                 }else{
  96.                   Alert.show("新增失败");
  97.                 }
  98.                 
  99.             }
  100.             private function comp(e:Event):void{
  101.                 var l:URLLoader = URLLoader(e.target);  
  102.                 var o:Object=URLUtil.stringToObject(l.data,";",true);
  103.                 if(o.result=="add"){
  104.                   Alert.show("新增成功");
  105.                   var obj:Object=(JSON.decode(o.datas) as Object);
  106.                   //dataArray.addItemAt(obj,0);
  107.                   Alert.show(obj.targetCalId);
  108.                 }
  109.                 initComponent();
  110.             
  111.             }
  112.             private function myClick(evt:CloseEvent):void{
  113.                 //Alert.show("本次要删除的为"+mainDataGrid.selectedIndex);
  114.                 if(evt.detail==Alert.YES){
  115.                     //Alert.show(acItemsSelected.getItemAt(0).targetId);
  116.                     var v:URLVariables = new URLVariables("id="+acItemsSelected.targetCalId+"&temp="+Math.random());
  117.                     var r:URLRequest = new URLRequest();  
  118.                     r.url =mainApp.urls+"/deleteTargetCal.do" ;  
  119.                     r.method = URLRequestMethod.POST;  
  120.                     r.data=v;
  121.                     var l:URLLoader = new URLLoader();          
  122.                     l.load(r);  
  123.                     
  124.                     //dataArray.removeItemAt(myGrid.selectedIndex);
  125.                     l.addEventListener(Event.COMPLETE,comp1); //注册请求完成后 响应获取数据事件方法 
  126.                     
  127.                 }
  128.             }
  129.             private function comp1(e:Event):void  
  130.             {  
  131.                 var l:URLLoader = URLLoader(e.target);
  132.                 var o:Object = URLUtil.stringToObject(l.data, ";", true);
  133.                 if(o.result=="delete"){
  134.                     Alert.show("删除成功!","友情提示");
  135.                 }
  136.                 initComponent();
  137.                 
  138.             } 
  139.             protected function button3_clickHandler(event:MouseEvent):void
  140.             {
  141.                 if(myGrid.selectedItem==null){
  142.                     Alert.show("请选择一项进行删除","友情提示");
  143.                 }else{
  144.                     var dlg_obj:Object=Alert.show("确认删除吗?", "友情提示!", Alert.YES|Alert.NO,null,myClick);
  145.                 }
  146.             }
  147.             protected function button4_clickHandler(event:MouseEvent):void
  148.             {
  149.                 
  150.                 if(myGrid.selectedItem==null){
  151.                     Alert.show("请选择一项进行修订!","友情提示");
  152.                 }else{
  153.                     var v:URLVariables = new URLVariables("targetTypeName="+targetTypeName.text+"&targetCal="+targetCal.text+"&id="+acItemsSelected.targetCalId);
  154.                     var r:URLRequest = new URLRequest();  
  155.                     r.url =mainApp.urls+"/updateTargetCal.do";  
  156.                     r.method = URLRequestMethod.POST;  
  157.                     r.data = v;  
  158.                     var l:URLLoader = new URLLoader();          
  159.                     l.load(r);  
  160.                     l.addEventListener(Event.COMPLETE,comp3); //注册请求完成后 响应获取数据事件方法 
  161.                 }
  162.             }
  163.             private function comp3(e:Event):void  
  164.             {  
  165.                 
  166.                 var l:URLLoader = URLLoader(e.target);  
  167.                 var o:Object = URLUtil.stringToObject(l.data, ";", true);       
  168.                 if(o.result=="update"){
  169.                     Alert.show("更新成功!","友情提示");
  170.                     var obj:Object=(JSON.decode(o.datas) as Object);
  171.                     //dataArray.setItemAt(obj,myGrid.selectedIndex);
  172.                 }else{
  173.                     Alert.show("操作失败!","友情提示");
  174.                 }
  175.                 initComponent();
  176.             }  
  177.             protected function myGrid_itemClickHandler(event:ListEvent):void
  178.             {
  179.                 acItemsSelected =myGrid.selectedItem;
  180.             }
  181.         ]]> 
  182.     </fx:Script> 
  183.     <mx:Form width="651" height="282"> 
  184.         <mx:DataGrid width="616" height="160" id="myGrid" itemClick="myGrid_itemClickHandler(event)"> 
  185.             <mx:columns> 
  186.                 <mx:DataGridColumn headerText="计量名称" dataField="targetTypeName"/> 
  187.                 <mx:DataGridColumn headerText="计量符号" dataField="targetCal"/> 
  188.                 <mx:DataGridColumn visible="false" dataField="targetCalId" /> 
  189.             </mx:columns> 
  190.         </mx:DataGrid> 
  191.         <mx:HBox> 
  192.             <s:Label  width="33"/> 
  193.             <mx:FormItem label="计量名称" > 
  194.                 <s:TextInput id="targetTypeName"/> 
  195.             </mx:FormItem> 
  196.             <mx:FormItem label="计量符号" > 
  197.                 <s:TextInput id="targetCal"/> 
  198.             </mx:FormItem> 
  199.             <mx:FormItem > 
  200.                 <s:Button label="新增" id="myButton" click="button2_clickHandler(event)" /> 
  201.             </mx:FormItem> 
  202.               
  203.         </mx:HBox> 
  204.         <mx:FormItem > 
  205.         </mx:FormItem> 
  206.           
  207.         <mx:HBox> 
  208.             <s:Label  width="250"/> 
  209.             <mx:FormItem > 
  210.                 <s:Button label="删除" click="button3_clickHandler(event)"/> 
  211.             </mx:FormItem> 
  212.             <mx:FormItem > 
  213.                 <s:Button label="修改" click="button4_clickHandler(event)"/> 
  214.             </mx:FormItem> 
  215.             <mx:FormItem > 
  216.                 <s:Button label="刷新"/> 
  217.             </mx:FormItem> 
  218.             <mx:FormItem > 
  219.                 <s:Button label="关闭" click="button1_clickHandler(event)"/> 
  220.             </mx:FormItem> 
  221.         </mx:HBox> 
  222.           
  223.     </mx:Form> 
  224. </s:TitleWindow> 
  225. </SPAN> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值