Ajax.net和GridView交互

本文介绍了一个关于Ajax.net和GridView交互的例子,通过前后端配合实现数据的动态加载与更新。重点探讨了回调函数嵌套的问题及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   今天在网上看了一个例子挺有意思的,于是拿过来就研究了一下,又学到了不少的东西,主要的内容是Ajax.net和GridView交互。
在作的过程中碰见了这样的问题,就是回调函数不能嵌套使用,那么解决的办法呢有2种(我个人的所发现的,可能还有其他更好的方法)。
下面就把这个小东东写出来。
一,先把第一个简单的容易看懂的写出来
 1None.gifusing System;
 2None.gifusing System.Data;
 3None.gifusing System.Configuration;
 4None.gifusing System.Collections;
 5None.gifusing System.Web;
 6None.gifusing System.Web.Security;
 7None.gifusing System.Web.UI;
 8None.gifusing System.Web.UI.WebControls;
 9None.gifusing System.Web.UI.WebControls.WebParts;
10None.gifusing System.Web.UI.HtmlControls;
11None.gifusing System.Data.SqlClient;
12None.gif
13None.gifnamespace LoadGridView
14ExpandedBlockStart.gifContractedBlock.gifdot.gif{
15InBlock.gif    public partial class Default6 : System.Web.UI.Page
16ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
17InBlock.gif        protected void Page_Load(object sender, EventArgs e)
18ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
19InBlock.gif            AjaxPro.Utility.RegisterTypeForAjax(typeof(Default6));
20InBlock.gif            AjaxPro.Utility.RegisterTypeForAjax(typeof(tt.Demo));
21ExpandedSubBlockEnd.gif        }

22InBlock.gif        [AjaxPro.AjaxMethod]
23InBlock.gif        public string AddAjaxTable(string name)
24ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
25InBlock.gif            System.Threading.Thread.Sleep(1000);
26InBlock.gif            string strcon = "server=.;database=AjaxTable;uid=sa;pwd=lanjie";
27InBlock.gif            SqlConnection con = new SqlConnection(strcon);
28InBlock.gif            con.Open();
29InBlock.gif            SqlCommand com = new SqlCommand();
30InBlock.gif            com.CommandText = "insert into Ajaxtt values('" + name + "')";
31InBlock.gif            com.Connection = con;
32InBlock.gif            int result=com.ExecuteNonQuery();
33InBlock.gif            con.Close();
34InBlock.gif            com.Dispose();
35InBlock.gif            return result.ToString();
36ExpandedSubBlockEnd.gif        }

37InBlock.gif        [AjaxPro.AjaxMethod]
38InBlock.gif        public string GetAjaxTable(int a )
39ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
40InBlock.gif            System.Threading.Thread.Sleep(1000);
41InBlock.gif            string strcon = "server=.;database=AjaxTable;uid=sa;pwd=lanjie";
42InBlock.gif            SqlConnection con = new SqlConnection(strcon);
43InBlock.gif            con.Open();
44InBlock.gif            SqlCommand com = new SqlCommand();
45InBlock.gif            com.CommandText = "select * from Ajaxtt";
46InBlock.gif            com.Connection = con;
47InBlock.gif            SqlDataAdapter dra = new SqlDataAdapter();
48InBlock.gif            dra.SelectCommand = com;
49InBlock.gif            DataSet ds = new DataSet();
50InBlock.gif            dra.Fill(ds, "Ajaxtt");
51InBlock.gif            con.Close();
52InBlock.gif            com.Dispose();
53InBlock.gif            GridView GV = new GridView();            
54InBlock.gif            GV.DataSource = ds;
55InBlock.gif            GV.DataBind();
56InBlock.gif            System.Text.StringBuilder strb = new System.Text.StringBuilder();
57InBlock.gif            System.IO.StringWriter sw = new System.IO.StringWriter(strb);
58InBlock.gif            System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw);
59InBlock.gif            GV.RenderControl(htw);
60InBlock.gif            string s = strb.ToString();
61InBlock.gif            return s;
62ExpandedSubBlockEnd.gif        }

63ExpandedSubBlockEnd.gif    }

64InBlock.gif    
65ExpandedBlockEnd.gif}

66None.gif
这是在后台页面的代码,很容易,那么在前台页面的js文件也很简单
 1ExpandedBlockStart.gifContractedBlock.gif<%dot.gif@ Page Language="C#" AutoEventWireup="true" CodeFile="Default6.aspx.cs" Inherits="LoadGridView.Default6" %>
 2None.gif
 3None.gif<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 4None.gif
 5None.gif<html xmlns="http://www.w3.org/1999/xhtml" >
 6None.gif<head runat="server">
 7None.gif    <title>邦定GridView</title>
 8ExpandedBlockStart.gifContractedBlock.gif    <script language=javascript>dot.gif
 9InBlock.gif    function AddAjax()
10ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
11InBlock.gif    var name=document.getElementById("nametext").value;
12InBlock.gif    LoadGridView.Default6.AddAjaxTable(name);
13InBlock.gif    LoadGV();  
14InBlock.gif             
15ExpandedSubBlockEnd.gif   }

16InBlock.gif   function LoadGV()
17ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
18InBlock.gif     document.getElementById("Gv").innerHTML= LoadGridView.Default6.GetAjaxTable(1).value;     
19ExpandedSubBlockEnd.gif   }

20ExpandedBlockEnd.gif 
</script>
21None.gif</head>
22None.gif<body onload="LoadGV();">
23None.gif<div id="loading" style="display:none;" ><img src=9.gif /><div id="ss" ></div></div>
24None.gif    <form id="form1" runat="server">
25None.gif    <input type="text" id="nametext"/>
26None.gif    <input type="button" value="AjaxButton" onclick="AddAjax();" />
27None.gif    <div id="Gv">
28None.gif    
29None.gif    </div>
30None.gif    </form>
31None.gif</body>
32None.gif</html>
33None.gif
这样就很容易的实现了Ajax和GridView的功能了,但是大家看看是不是和以前我们写的代码有点不一样呢?就是在js里面我们没有用回调的函数,
那么如果要使用回调函数会出现什么问题呢?先面就把不太正确的做法写出来,不是说不正确,而是离我们的想要的效果还有一段距离,.cs文件是一样的,唯独js的函数不一样了,我只把js的函数列出来
 1None.gif function AddAjax()
 2ExpandedBlockStart.gifContractedBlock.gif    dot.gif{
 3InBlock.gif     var name=document.getElementById("nametext").value;
 4InBlock.gif     LoadGridView.Default6.AddAjaxTable(name,CallBack);  
 5InBlock.gif             
 6ExpandedBlockEnd.gif    }

 7None.gif     function LoadGV()
 8ExpandedBlockStart.gifContractedBlock.gif    dot.gif{
 9InBlock.gif      LoadData();      
10InBlock.gif      tt.Demo.GetAjaxTable(1,CallServerBack);     
11ExpandedBlockEnd.gif    }

12None.gif    function CallServerBack(res)
13ExpandedBlockStart.gifContractedBlock.gif    dot.gif{
14InBlock.gif     closeloading();
15InBlock.gif     var cc=document.getElementById("Gv");
16InBlock.gif     cc.innerHTML=res.value;
17ExpandedBlockEnd.gif    }

18None.gif    function CallBack(ss)
19ExpandedBlockStart.gifContractedBlock.gif    dot.gif{
20InBlock.gif       closeloading();
21InBlock.gif       if(ss.value!=0)
22ExpandedSubBlockStart.gifContractedSubBlock.gif       dot.gif{
23InBlock.gif       LoadGV();  
24ExpandedSubBlockEnd.gif       }
             
25ExpandedBlockEnd.gif    }
大家仔细看,在CalBack回调函数里面我们调用了LoadGv函数,而LoadGV函数确又调用CallServerBack这个回调函数,那么就是回调函数嵌套了,
这样的话,虽然运行没问题,但是效果和第一个的就不一样,在插入后,页面不会把新插入的数据即时的显示出来,那么怎么办呢?
就是在CallBack函数里面改写一下程序,把LoadGV()改为window.setTimeout(LoadGV,100);这样一来就实现了相同的效果,同时呢又回到了我们熟悉的回调函数了。
另一种解决方法是把LoadGV所要执行的服务器的回调函数写道另一个.cs文件里面那么上面的js的文件就用改写了,只是要把方法掉对了。
有什么不妥当的地方,还请各位高手指点。

转载于:https://www.cnblogs.com/symjie520/archive/2007/04/18/718961.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值