Flex 解析显示.net web service的DataTable返回
2006-09-20 16:43
387 查看
<?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){
//处理异常
}
}
<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之Json(三)-----easy ui怎么把前台显示的dataGird中的所有数据序列化为json,返回到后台并解析
- Flex与.NET WebService
- 玩转Web之Json(三)-----easy ui怎么把前台显示的dataGird中的所有数据序列化为json,返回到后台并解析
- Nintex 2010 解析.net Webservice
- 玩转Web之Json(三)-----easy ui怎么把前台显示的dataGird中的所有数据序列化为json,返回到后台并解析
- c# webserice 返回DataTable部分数据被截取 显示不全的问题
- Java Web(8)struts2 result 返回json,jQuery 解析显示
- 【原创】 ASP.NET + C# + WEBSERVICE 返回表数据和记录数据
- ext异步请求一个aspx/ashx/web service取得数据,服务端返回一个json.然后客户端接收并显示.
- Delphi调用 .net webService 返回数据;
- ASP.NET Web Services系列(2) - What Is an XML Web Service?
- 使用FLEX的HttpService与ASP.NET进行动态交互之一
- python dom 解析 webservice xml
- 问题.NETwebservice其他电脑无法使用-测试窗体只能用于来自本地计算机的请求
- 详细讲解PHP调用.net webservice
- ASP.NET使用Coolite.Ext.Web.dll,显示ext 未定义 的解决方法
- .net Rest Web Api Controller 返回JSON格式大小写问题解决.
- C# post数据时 出现如下错误: System.Net.WebException: 远程服务器返回错误: (417) Expectation Failed 的解决办法
- asp.net C# webservice安全性方案
- Xml WebService完全实例解析