当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

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

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

希望路过的大家多多交流


原文地址:https://www.cnblogs.com/frostbelt/p/1880686.html