Flex 解析显示.net web service的DataTable返回

<? xml version="1.0" encoding="utf-8" ?>
< mx:Application  xmlns:mx ="http://www.adobe.com/2006/mxml"  layout ="absolute" >
    
< mx:Script >
    
<![CDATA[
        import mx.controls.Alert;
    
]]>
</ mx:Script >
< mx:WebService  useProxy ="false"  wsdl ="http://localhost/WebSite/Service.asmx?WSDL"  id ="ws"  showBusyCursor ="true" >
        
< mx:operation  name ="GetDataTable2" >
        
</ mx:operation >
</ mx:WebService >
< mx:Button  x ="153"  y ="20"  label ="Get DataSet"  click ="ws.GetDataTable2.send();" />
< mx:DataGrid  left ="22"  right ="22"  top ="50"  bottom ="386"  id ="dg2"
         dataProvider
="{ws.GetDataTable2.lastResult.diffgram.NewDataSet.Table}" >
        
< mx:columns >
            
< mx:DataGridColumn  headerText ="编号"  dataField ="编号" />
            
< mx:DataGridColumn  headerText ="门禁控制器号"  dataField ="门禁控制器号" />
            
< mx:DataGridColumn  headerText ="帐号"  dataField ="帐号" />
            
< mx:DataGridColumn  headerText ="卡号"  dataField ="卡号" />
            
< mx:DataGridColumn  headerText ="交易时间"  dataField ="交易时间" />
            
< mx:DataGridColumn  headerText ="上传结果"  dataField ="上传结果" />
            
< mx:DataGridColumn  headerText ="流水类型"  dataField ="流水类型" />
        
</ mx:columns >
    
</ mx:DataGrid >
</ mx:Application >

注意此处:
dataProvider="{ws.GetDataTable2.lastResult.diffgram.NewDataSet.Table}">

应该指出的是在Flex中解析DataTable是非常慢的,能够明显感觉到鼠标的停顿。
而且存在一个问题就是DataTable中只有一条数据的时候,Flex解析的结果是ProxyObject而不是ArrayCollection,需要手工处理才能绑定DataGrid。

建议使用DataSet返回XmlDocument,不过同样存在一条数据的问题。
.NET
[WebMethod]
    
public  XmlDocument GetList( int  id)
    {
        
try
        {
            DataSet ds 
=   new  BLL.User.GetList(id);
            XmlDocument xml 
=   new  XmlDocument();
            xml.LoadXml(ds.GetXml());
            
return  xml;
        }
        
catch  (Exception ex)
        {
            XmlDocument xml 
=   new  XmlDocument();
            xml.LoadXml(
" <Error> "   +  ex.Message  +   " </Error> " );
            
return  xml;
        }
    }

Flex
private  var  mydata:ArrayCollection  =   new  ArrayCollection();  // Data
private  function  getListResult(event:ResultEvent): void {  
    
try {
        mydata.removeAll();
// 清空原数据
     if (event.result.Error  !=   null ){  // 服务器端异常,见.NET上的catch
        Alert.show(event.result.Error);
    }
else {            
        
if (event.result.diffgram.NewDataSet  !=   null ){
            
if (event.result.diffgram.NewDataSet.ds is ArrayCollection)  // 判断是否是一条数据,使用DataTable时同样存在
            mydata  =  event.result.diffgram.NewDataSet.ds as ArrayCollection;     
        
else
            mydata.addItem(event.result.diffgram.NewDataSet.ds);  
// 只有一条数据         
        }  
    }
    }
    
catch (err:Error){
        
// 处理异常
    }   
}


你可能感兴趣的:(web Service)