• 当WebService返回的结果是DataSet时,Flex如何处理


    以查询火车时刻表的WebService为例:

    http://webservice.webxml.com.cn/WebServices/TrainTimeWebService.asmx?wsdl

    顺便介绍下Flex调用WebService,相信能看到这篇随笔的人都已经熟悉了,但还是希望有机会照顾一下新手

    在你新建的Application中,实例化WebService对象:

    	<mx:WebService id="ws" wsdl="http://webservice.webxml.com.cn/WebServices/TrainTimeWebService.asmx?wsdl"
    	    showBusyCursor="true" fault="fault_Handler(event)">
    		<mx:operation name="getStationAndTimeByStationName" result="result_Handler(event)"/>
    	</mx:WebService>
    

    wsdl是你要调用的WebService,operation是它的方法,调用这个方法时,结果交给result_Handler(event)函数。

               function fault_Handler(event:FaultEvent){
                    Alert.show(event.fault.message);
                }
                function result_Handler(event:ResultEvent){
                    dg.dataProvider=event.result.Tables.TimeTable.Rows;
                }
    
    
    dg是显示结果的DataGrid。为什么这儿有event.result.Tables.TimeTable.Rows呢?

    你可以在浏览器中先试一下,在IE中打开:
    http://webservice.webxml.com.cn/WebServices/TrainTimeWebService.asmx?op=getStationAndTimeByStationName<br>
    输入“始发站”和“抵达站”,点“调用”,结果是一个XML:



    结果的格式是按照TimeTable这个element定义的。我们得到了这个DataSet,只要再在DataGrid中定义要显示的字段就可以了:
      <mx:DataGrid id="dg" width="100%" height="100%">
            <mx:columns>
                <mx:DataGridColumn headerText="车次" dataField="TrainCode"/>
                <mx:DataGridColumn headerText="始发站" dataField="FirstStation"/>
                <mx:DataGridColumn headerText="终点站" dataField="LastStation"/>
                <mx:DataGridColumn headerText="发车站" dataField="StartStation"/>
                <mx:DataGridColumn headerText="发车时间" dataField="StartTime"/>
                <mx:DataGridColumn headerText="抵达站" dataField="ArriveStation"/>
                <mx:DataGridColumn headerText="抵达时间" dataField="ArriveTime"/>
                <mx:DataGridColumn headerText="里程(KM)" dataField="KM"/>
                <mx:DataGridColumn headerText="历时" dataField="UseDate"/>
            </mx:columns>
        </mx:DataGrid>
    
    

    以下是完整代码(我定义的是一个组件):

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%" fontSize="12"
        >
        <mx:Form id="form" width="100%" height="150">
            <mx:FormItem label="发车站:">
                <mx:TextInput id="input_start" width="200" text="上海"/>
            </mx:FormItem>
            <mx:FormItem label="抵达站:">
                <mx:TextInput id="input_end" width="200" text="北京"/>
            </mx:FormItem>
            <mx:FormItem>
                <mx:Button id="bt" label="查询" click="init()"/>
            </mx:FormItem>
        </mx:Form>
        <mx:DataGrid id="dg" width="100%" height="100%" y="{form.height}">
            <mx:columns>
                <mx:DataGridColumn headerText="车次" dataField="TrainCode"/>
                <mx:DataGridColumn headerText="始发站" dataField="FirstStation"/>
                <mx:DataGridColumn headerText="终点站" dataField="LastStation"/>
                <mx:DataGridColumn headerText="发车站" dataField="StartStation"/>
                <mx:DataGridColumn headerText="发车时间" dataField="StartTime"/>
                <mx:DataGridColumn headerText="抵达站" dataField="ArriveStation"/>
                <mx:DataGridColumn headerText="抵达时间" dataField="ArriveTime"/>
                <mx:DataGridColumn headerText="里程(KM)" dataField="KM"/>
                <mx:DataGridColumn headerText="历时" dataField="UseDate"/>
            </mx:columns>
        </mx:DataGrid>
         
        <mx:WebService id="ws" wsdl="http://webservice.webxml.com.cn/WebServices/TrainTimeWebService.asmx?wsdl"
            showBusyCursor="true" fault="fault_Handler(event)">
            <mx:operation name="getStationAndTimeByStationName" result="result_Handler(event)"/>
        </mx:WebService>
         
        <mx:Script>
            <![CDATA[
                import mx.rpc.events.ResultEvent;
                import mx.controls.Alert;
                import mx.rpc.events.FaultEvent;
                import mx.collections.ArrayCollection;
                [Bindable]
                var ac:ArrayCollection=new ArrayCollection;
                 
                public function init():void{
                    ws.getStationAndTimeByStationName(input_start.text,input_end.text,'');
                }
                function fault_Handler(event:FaultEvent){
                    Alert.show(event.fault.message);
                }
                function result_Handler(event:ResultEvent){
                    dg.dataProvider=event.result.Tables.TimeTable.Rows;
                }
            ]]>
        </mx:Script>
    </mx:Canvas>
    
    
    Demo:

    http://www.cnblogs.com/frostbelt/archive/2010/11/18/1880672.html

    如果你看了,搞定了,顶一下吧

    如果你看了,没搞定,问一下吧

    希望路过的大家多多交流


  • 相关阅读:
    用于主题检测的临时日志(594fb726-af0b-400d-b647-8b1d1b477d72
    返璞归真vc++之字符类型
    DIV居中
    程序员职业生涯
    枚举进程句柄
    不使用mutex设计模式解决并发访问cache
    服务器权重分配算法
    xmemecached中的一致性hash算法
    安卓课堂练习
    pythonPTA---分支循环与集合7-1 jmu-python-韩信点兵 (20分) 7-2 打印数字矩形 (10分) 7-3 成绩统计 (10分) 7-4 找列表中最大元素的下标 7-5 删除列表中的重复值
  • 原文地址:https://www.cnblogs.com/frostbelt/p/1880686.html
Copyright © 2020-2023  润新知