ASP.NET 3.5 AJAX Webservice调用返回DataTable问题

Hertz_liu 2009-04-22 02:09:06
ASP.NET 3.5 AJAX Webservice调用返回DataTable问题

就是说,比如我有一个客户端按钮,当点击的时候,调用WebServices的一个方法,得到一个DataTable,并需要将这个WebServices返回的DataTable显示在页面上,请教各位前辈,如何去实现?

希望大家能够说的详细一些,我在网上也找了好多的资源,针对他们的做法,我都没有实现出来。希望各位前辈能够把自己的做法讲的详细一点(当然,这其中包括一些序列化反序列化的问题),对于造成大家时间上的消耗,我只能用技术分来给大家做一个补偿^_^ 先弄个150分,不够再加!
...全文
958 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xpnew 2009-08-18
  • 打赏
  • 举报
回复
DataTable不能序列化需要换DataSet???

这个我在别处看到的答案,解决办法是给DataTable添加TableName。

例如: dt.TableName = "abc";
yan286093636 2009-06-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 fengmir 的回复:]
DataTable不能序列化需要换DataSet
[/Quote]
有道理。。。。。。。。。
fengmir 2009-05-13
  • 打赏
  • 举报
回复
DataTable不能序列化需要换DataSet
vlysses 2009-04-22
  • 打赏
  • 举报
回复
返回的datatable在js里可以直接作为对象使用,如DataTable dt=webService.getTable(...);
takako_mu 2009-04-22
  • 打赏
  • 举报
回复
To Liu2008hz
如果有問題請跟帖.
Hertz_liu 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wf5360308 的回复:]
在你项目中添加Webservice的引用,然后调用该Webservice的方法,就和调用平常的方法一样。
[/Quote]
这些我知道,像一般的,比如WebServices执行返回一些字符串什么的,都能得到,但是在返回DataTable的过程中出了问题,查了一些资料,有说跟序列化有关
冷月孤峰 2009-04-22
  • 打赏
  • 举报
回复
在你项目中添加Webservice的引用,然后调用该Webservice的方法,就和调用平常的方法一样。
takako_mu 2009-04-22
  • 打赏
  • 举报
回复


/*--填充div--------------------------------------------------------------------------------------------------------*/
function UpdateTable(xmlDoc)
{
var sb = new Sys.StringBuilder();


sb.append("<table cellspacing=\"0\" cellpadding=\"4\" rules=\"all\" border=\"1\" id=\"__AJAX_GridView__div\" style=\"background-color:White;border-width:1px;border-style:Solid;border-collapse:collapse;\">");
sb.append("<tr style=\"font-weight:bold;\">");
sb.append("<th scope=\"col\" style=\"width:1%;white-space:nowrap;\">No</th>");
sb.append("<th scope=\"col\" style=\"width:1%;white-space:nowrap;\">Project1</th>");
sb.append("<th scope=\"col\" style=\"width:1%;white-space:nowrap;\">Item</th>");
sb.append("<th scope=\"col\" style=\"width:1%;white-space:nowrap;\">Code</th>");
sb.append("<th scope=\"col\" style=\"width:1%;white-space:nowrap;\">Desciption</th>");
sb.append("<th scope=\"col\" style=\"width:1%;white-space:nowrap;\">Status</th>");
sb.append("<th scope=\"col\" style=\"width:1%;white-space:nowrap;\">Percent</th>");
sb.append("<th scope=\"col\" style=\"width:1%;white-space:nowrap;\">StartDate Date</th>");
sb.append("<th scope=\"col\" style=\"width:1%;white-space:nowrap;\">DueDate</th>");
sb.append("<th scope=\"col\" style=\"width:1%;white-space:nowrap;\">Owner</th>");
sb.append("<th scope=\"col\" style=\"width:1%;white-space:nowrap;\">NeedTime</th>");
sb.append("</tr>");


var x = xmlDoc.getElementsByTagName('AJAXData');
for (i=0;i<x.length;i++)
{
var PostItem=x[i];
var No=PostItem.childNodes[0].text;
var Project1=PostItem.childNodes[1].text;
var Item=PostItem.childNodes[2].text;
var Code=PostItem.childNodes[3].text;
var Desciption=PostItem.childNodes[4].text;
var Status=PostItem.childNodes[5].text;
var Percent=PostItem.childNodes[6].text;
var StartDate=PostItem.childNodes[7].text;
var DueDate=PostItem.childNodes[8].text;
var Owner=PostItem.childNodes[9].text;
var NeedTime=PostItem.childNodes[10].text;

sb.append("<tr style=\"color:#003399;background-color:White;\">");
sb.append("<td class=\"frozenHorizontal\" style=\"width:50px;\">");
sb.append(No);
sb.append("</td>");
sb.append("<td class=\"frozenHorizontal\" style=\"width:50px;\">");
sb.append(Project1);
sb.append("</td>");
sb.append("<td class=\"frozenHorizontal\" style=\"width:50px;\">");
sb.append(Item);
sb.append("</td>");

sb.append("<td class=\"frozenVerticalOther\" style=\"width:50px;\">");
sb.append(Code);
sb.append("</td>");
sb.append("<td class=\"frozenVerticalOther\" style=\"width:50px;\">");
sb.append(Desciption);
sb.append("</td>");
sb.append("<td class=\"frozenVerticalOther\" align=\"right\" style=\"width:80px;\">");
sb.append(Status);
sb.append("</td>");

sb.append("<td class=\"frozenVerticalOther\" align=\"right\" style=\"width:80px;\">");
sb.append(Percent);
sb.append("</td>");
sb.append("<td class=\"frozenVerticalOther\" style=\"width:100px;\">");
sb.append(StartDate);
sb.append("</td>");
sb.append("<td class=\"frozenVerticalOther\" style=\"width:50px;\">");
sb.append(DueDate);
sb.append("</td>");

sb.append("<td class=\"frozenVerticalOther\" style=\"width:50px;\">");
sb.append(Owner);
sb.append("</td>");
sb.append("<td class=\"frozenVerticalOther\" style=\"width:50px;\">");
sb.append(NeedTime);
sb.append("</td>");
sb.append("</tr>");
}
sb.append("</table>");
$get("__AJAX_GridView1__div").innerHTML=sb.toString();
}

/*--填充div--------------------------------------------------------------------------------------------------------*/
takako_mu 2009-04-22
  • 打赏
  • 举报
回复

/*--相當于GridViewBind()-------------------------------------------------------------------------------------------*/
function Search(pagesize,pageCurrentCount)
{
var UserName=$get("optSelectUserName").value;
var Project=$get("optSelectProject").value;
GetData(pagesize,pageCurrentCount,UserName,Project);
return false;
}

function GetData(pagesize,pageCurrentCount,userName, project)
{
$get("displayImage").style.display="block";
var UserName=userName;
var Project=project;
WebService_AJAXGridView.GetData(pagesize,pageCurrentCount,UserName, Project, SucceededCallback, FailedCallback,"XmlDocument");
}

function SucceededCallback(result, userContext, methodName)
{
if (userContext == "XmlDocument")
{
UpdateTable(result);
}
$get("displayImage").style.display="none";
//document.getElementById("lab_TotalPage").innerText=
}

function FailedCallback(error)
{
// Display the error.
var stackTrace=error.get_stackTrace();
var message= error.get_message();
var statusCode=error.get_statusCode();
var exceptionType=error.get_exceptionType();
var timeout=error.get_timedOut();

var errstr="推疊追蹤: "+ stackTrace+"\n";
errstr+="服務錯誤:"+ message+"\n";
errstr+="狀態碼:"+ statusCode+"\n";
errstr+="例外類型:"+ exceptionType+"\n";
errstr+="逾時:"+ timeout+"\n";
errstr+="請關掉IE, 重新進入 !!";
alert(errstr);

$get("displayImage").style.display="none";
}
/*--相當于GridViewBind()-------------------------------------------------------------------------------------------*/
takako_mu 2009-04-22
  • 打赏
  • 举报
回复


/// <summary>
/// WebService_AJAXGridView 的摘要描述
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// 若要允許使用 ASP.NET AJAX 從指令碼呼叫此 Web 服務,請取消註解下一行。
[System.Web.Script.Services.ScriptService]
public class WebService_AJAXGridView : System.Web.Services.WebService {

public WebService_AJAXGridView () {

//如果使用設計的元件,請取消註解下行程式碼
//InitializeComponent();
}

[WebMethod]
public string HelloWorld() {
return "Hello World";
}

//Create By Takako_Yang,at 2008/12/04
//這段的主要思想是將DataTable轉換成XML-->JS
[WebMethod(Description = "My AJAX Gridview Data Select", EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
public XmlDocument GetData(int pagesize,int pageCurrentCount,string userName, string project)
{
DailyWorkFactory myDailyWorkFactory = new DailyWorkFactory();
//調用類取得DataTable
DataTable dt = myDailyWorkFactory.GetDailyWork(0, 1,pagesize,pageCurrentCount, userName, project, "");//flag1用來判斷Select來源自現有的,還是編輯時Create的新的
StringBuilder sb = new StringBuilder();
sb.Append("<AJAXSet>");
//select [No],Project,Item,Code,[Description (purpose/value)],
//Status,[%],[Start Date],[Due Date],Owner,[Day/Hour] from daily_work
foreach (DataRow myDataRow in dt.Rows)
{
string No = myDataRow[0].ToString();
string Project1 = myDataRow[1].ToString();
string Item = myDataRow[2].ToString();
string Code = myDataRow[3].ToString();
string Desciption = myDataRow[4].ToString();
string Status = myDataRow[5].ToString();
string Percent = myDataRow[6].ToString();
string StartDate = (Convert.ToDateTime(myDataRow[7])).ToString("yyyy/MM/dd");
string DueDate = (Convert.ToDateTime(myDataRow[8])).ToString("yyyy/MM/dd");
string Owner = myDataRow[9].ToString();
string NeedTime = myDataRow[10].ToString();
sb.Append("<AJAXData>");
sb.Append("<P1>").Append(No).Append("</P1>");
sb.Append("<P2>").Append(Project1).Append("</P2>");
sb.Append("<P3>").Append(Item).Append("</P3>");
sb.Append("<P4>").Append(Code).Append("</P4>");
sb.Append("<P5>").Append(Desciption).Append("</P5>");
sb.Append("<P6>").Append(Status).Append("</P6>");
sb.Append("<P7>").Append(Percent).Append("</P7>");
sb.Append("<P8>").Append(StartDate).Append("</P8>");
sb.Append("<P9>").Append(DueDate).Append("</P9>");
sb.Append("<P10>").Append(Owner).Append("</P10>");
sb.Append("<P11>").Append(NeedTime).Append("</P11>");
sb.Append("</AJAXData>");
}
sb.Append("</AJAXSet>");
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(sb.ToString());
return xmlDoc;
}
}
takako_mu 2009-04-22
  • 打赏
  • 举报
回复
這個分我要了。我去拿代碼..

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧