Flex3 remoting通讯 读取数据库数据

昨天说了flex与.net的remoting通讯,今天尝试了一下读取数据库数据内容,简单做了个范例.

   Flex客户端程序
  <?xml version="1.0" encoding="utf-8"?>
  <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
    <mx:Script>
        <![CDATA[
            import mx.rpc.events.FaultEvent;
            import mx.rpc.events.ResultEvent;
            import mx.controls.Alert;
            import mx.controls.ComboBox;
            import mx.events.DropdownEvent;

            private function RemoteResult(re:ResultEvent):void
            {
                switch(re.currentTarget.name)
                {
                    case "getRankCount":
                        var str:String = re.result as String;
                        setupComboBox(uint(str))
                        break;
                    case "getRankTop":
                        dg.enabled=true;
                        setupDataGrid(re.result.Table.serverInfo)
                        break;
                }  
            }
            //
            private function RemoteFault(re:FaultEvent):void
            {
                Alert.show("Message:" re.fault.faultString,"出错");
            }    
            //设置comboBox数据
            private function setupComboBox(nums:uint):void {
               cb.enabled=true;
               var cbArray:Array=new Array()
               for (var i:uint=0;i<nums;i ){
                  cbArray.push({label:i 1,data:i 1});
               }
               cb.dataProvider=cbArray;
               //设定选取后数据动作
               cb.addEventListener(Event.CHANGE, cardSelected);           
             }
            //cb数值改变后连接数据库,执行服务器端方法,读取数据
            private function cardSelected(e:Event):void{
                service.getRankTop(e.currentTarget.value as uint);
            }
            //设置gd
            private function setupDataGrid(Obj:Object):void{
                 var titleArray:Array=Obj.columnNames as Array
                 var initialDataArray:Array=Obj.initialData as Array               
                 var dgArray:Array=new Array()
                 for (var i:uint=0;i<initialDataArray.length;i ){
                    var dgObj:Object=new Object()
                    for (var j:uint=0;j<titleArray.length;j ){
                      var tmp:String=titleArray[j].toString()
                      dgObj[tmp]=Obj.initialData[i][j];
                   }
                   dgArray.push(dgObj)
                 }
                 dg.dataProvider=dgArray;
            }
        ]]>
    </mx:Script>

     <mx:RemoteObject 
              id="service"
             destination="fluorine"
             source="remoting.Sample" 
             showBusyCursor="true" >
            <!--这里是.NET中的方法,name = 方法名 -->
         <mx:method name="getRankCount" result="RemoteResult(event)" fault="RemoteFault(event)"/>   
        <mx:method name="getRankTop" result="RemoteResult(event)" fault="RemoteFault(event)"/>           
    </mx:RemoteObject>
    <mx:Button id="getRankCountBtn" label="连接数据库" click="service.getRankCount()" fontSize="14"/>
   <mx:ComboBox id="cb" prompt="取前几条数据" fontSize="14"  width="138" enabled="false"/>
   <mx:DataGrid id="dg" enabled="false" />
 </mx:Application>

    .net服务器端

    代码就不写了,一共2个方法,一个方法用来获取数据总条数,一个用来根据数量获取数据记录集.

    总结:
   
这个范例用到了动态生成ComboBox与DataGrid,需要解析.net返回回来的DataSet类型.

posted @ 2008-10-23 10:04  Landy_di  阅读(263)  评论(0)    收藏  举报