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>

运行结果如下:



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

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

posted @ 2006-08-08 00:34  沐枫  阅读(5977)  评论(17编辑  收藏  举报