Flex与.NET WebService(续:与DataTable协作)

  .NET WebService经常会返回DataSet数据,因此,如果Flex能够处理DataSet就完美了。本以为这是很简单的事,但实际试过后,才发现有问题。难道Flex不能与.NET的DataSet一起工作吗?
经过上网查找,没找到解决方法。发现有的人是用结构数组来返回数据,有的是转换成xml字串来返回数据。不论是什么方法,都要对现有的.NET WebService进行大的变动,并且也不方便。

最后发现,使用DataTable返回数据就可以直接与Flex协作。

举一个很简单的例子:
现有如下的数据表:


WebMethod为GetCustomer:

[WebService(Namespace  =   " http://tempuri.org/ " )]
public   class  Service : System.Web.Services.WebService
{
    
public Service () {    }

    [WebMethod]
    
public DataTable GetCustomers() {
        DataSet ds 
= new DataSet();
        
using (SqlConnection conn = new SqlConnection(@"Data Source=muf\sqlexpress;Initial Catalog=Test;Integrated Security=True"))
        
using (SqlDataAdapter ada = new SqlDataAdapter("select * from customer", conn))
        
{
            ada.Fill(ds, 
"customer");     
        }

        
return ds.Tables["customer"];
    }

    
}

现在Flex只要很简单的增加<mx:WebService>就可以了:
<? xml version="1.0" encoding="utf-8" ?>
< mx:Application  xmlns:mx ="http://www.adobe.com/2006/mxml"  layout ="absolute"  initialize ="Service.GetCustomers.send();" >
    
< mx:WebService  id ="Service"  
        wsdl
="http://localhost:1708/WebSite1/Service.asmx?WSDL"          
        useProxy
="false" >
        
< mx:operation  name ="GetCustomers" >
            
< mx:request >                 
            
</ mx:request >
        
</ mx:operation >

    
</ mx:WebService >

    
< mx:DataGrid  x ="25"  y ="10"  dataProvider ="{Service.GetCustomers.lastResult.diffgram.NewDataSet.customer}" >
        
< mx:columns >
            
< mx:DataGridColumn  headerText ="ID"  dataField ="ID" />
            
< mx:DataGridColumn  headerText ="Name"  dataField ="Name" />
            
< mx:DataGridColumn  headerText ="Address"  dataField ="Address" />
            
< mx:DataGridColumn  headerText ="Age"  dataField ="Age" />
            
< mx:DataGridColumn  headerText ="Gender"  dataField ="Gender" />
        
</ mx:columns >
    
</ mx:DataGrid >
    
</ mx:Application >

运行结果如下:

Flex与.NET WebService(续:与DataTable协作)

这里头主要注意的是,DataProvider的绑定值为: Service.GetCustomers.lastResult.diffgram.NewDataSet.customer。
其中,NewDataSet是DataSet的名称,customer是表的名称。
 

思考:为什么DataSet不行而DataTable行呢?

你可能感兴趣的:(webservice)