您的位置:首页 > 编程语言 > C#

关于Ajax无刷新分页技术的一些研究 c#

2013-07-30 15:20 330 查看

关于Ajax无刷新分页技术的一些研究 c#

小弟新手,求大神有更好的解决方案,指教下~

以前做项目,用过GridView的刷新分页,也用过EasyUI的封装好的分页技术,最近在老项目的基础上加新功能,迫于需求,自己没事琢磨了个Ajax无刷新分页技术,

也在百度看了下, 写的都不是很系统,在这里写个系统的,简单的,方便大家研究下。

系统支持 和数据库交互的无刷新分页、删除后的 当前页 定位、在查询条件下的 分页 ,有数据,显示删除,列表,没有只显示新增按钮。

项目采取的后台拼html,图了个简单,方便区分分页js,在后台写html,增加服务器压力,第一选择还是传JSON哈,谢谢楼下大神回答。

我写的这个无刷新分页用的最重要的sql 语句就是

sql = @"select * from (select ROW_NUMBER() over (ORDER BY CREATEDATE) rownum,a.goodsid,a.goodsname,a.itemname,a.price FROM GoodsOrderAccept a " + selectsql + ") t where t.rownum>='" + ((page - 1) * 10 + 1) + "' and t.rownum<='" + page * 10 + "'";

相信有些大神,看到这里,已经知道我采取的什么方法了,重点就是 ROW_NUMBER(),利用它和Page变量,从前台页面请求不同的页码,显示不同的数据。

下面看一下项目的目录结构:



List.aspx就是页面,Page.ashx就是实现的分页技术,JSONObject.cs在后台对JSON序列化成对象。

List.aspx页面执行如下:



如页面所示,支持checkbox,单删除,多删除.

下面开始贴代码:

List.aspx页面代码如下:

1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="List.aspx.cs" Inherits="AjaxPage.List" %>
2
3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4 <html xmlns="http://www.w3.org/1999/xhtml">
5 <head runat="server">
6     <script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>
7     <title>分页功能演示</title>
8     <script type="text/javascript">
9         $(function () {
10
11             //初始化首页数据以及各种变量
12             $.ajax({
13                 type: "POST",
14                 url: "Page.ashx",
15                 dataType: "json",
16                 data: {
17                     action: "getFirstPageAndVariable"
18                 },
19                 success: function (data) {
20                     if (data.outStr != "" && data.pagecount != "0") {
21                         //有数据加载数据列表,显示数据列表,显示删除按钮,以及分页按钮
22                         document.getElementById('btn_delete').style.display = "";
23                         document.getElementById('div_list').style.display = "";
24                         document.getElementById('div_page').style.display = "";
25                         $("#tbody_list").empty();
26                         $("#tbody_list").append(data.outStr);
27                         //把总页数赋值给变量
28                         $('#<%=hid_last.ClientID %>').val(data.pagecount);
29                         //初始化页数输入框
30                         $("#text_page").val($('#<%=hid_shou.ClientID %>').val());
31                         //将上一页和下一页变量赋值为首页变量
32                         $('#<%=hid_change.ClientID %>').val($('#<%=hid_shou.ClientID %>').val());
33                     }
34                 }
35             });
36             //绑定按钮事件
37             $("#btn_search").bind("click", btn_search);
38             $("#btn_delete").bind("click", btn_delete);
39             //查询事件
40             function btn_search(event) {
41
42                 //查询输入框不为空的话,才执行查询事件
43                 //if ($("#text_search").val().toString().replace(/[ ]/g, "") != "") {
44                 $.ajax({
45                     type: "POST",
46                     url: "Page.ashx",
47                     dataType: "json",
48                     data: {
49                         action: "getFirstPageAndVariable",
50                         search: $("#text_search").val()
51                     },
52                     success: function (data) {
53                         if (data.outStr != "" && data.pagecount != "0") {
54                             //有数据加载数据列表,显示数据列表,显示删除按钮,以及分页按钮
55                             document.getElementById('btn_delete').style.display = "";
56                             document.getElementById('div_list').style.display = "";
57                             document.getElementById('div_page').style.display = "";
58                             $("#tbody_list").empty();
59                             $("#tbody_list").append(data.outStr);
60                             //把总页数赋值给变量
61                             $('#<%=hid_last.ClientID %>').val(data.pagecount);
62                             //初始化页数输入框
63                             $("#text_page").val($('#<%=hid_shou.ClientID %>').val());
64                             //模糊查询后,将上一页和下一页变量赋值为首页变量
65                             $('#<%=hid_change.ClientID %>').val($('#<%=hid_shou.ClientID %>').val());
66                         }
67                     }
68                 });
69                 //}
70             }
71             //删除事件
72             function btn_delete(event) {
73                 var deleteData = "";
74                 $("#tbody_list tr").each(function () {
75                     if ($($(this).children().get(0)).find("input")[0].status) {
76                         deleteData += $($(this).children().get(0)).find("input")[0].value + "," + $($(this).children().get(0)).find("input")[0].value + "|";
77                     }
78                 });
79                 if (deleteData == "") {
80                     alert("不能提交空数据!");
81                     return false;
82                 }
83                 if (!confirm("确定要删除吗?")) {
84                     return false;
85                 }
86                 $.ajax({
87                     type: "POST",
88                     url: "Page.ashx",
89                     dataType: "json",
90                     data: {
91                         action: "deleteData",
92                         deleteData: deleteData
93                     },
94                     success: function (data) {
95                         if (data.status == "success") {
96                             //初始化当前页数据以及各种变量
97                             $.ajax({
98                                 type: "POST",
99                                 url: "Page.ashx",
100                                 dataType: "json",
101                                 data: {
102                                     action: "getDeletePageAndVariable",
103                                     hid_change: $('#<%=hid_change.ClientID %>').val(),
104                                     search: $("#text_search").val()
105                                 },
106                                 success: function (data) {
107                                     if (data.pagecount != "0") {
108                                         $("#tbody_list").empty();
109                                         $("#tbody_list").append(data.outStr);
110                                         //把总页数赋值给变量
111                                         $('#<%=hid_last.ClientID %>').val(data.pagecount);
112                                         //初始化页数输入框
113                                         $("#text_page").val(data.hid_change);
114                                         //将上一页和下一页变量赋值为首页变量
115                                         $('#<%=hid_change.ClientID %>').val(data.hid_change);
116                                     }
117                                 }
118                             });
119                         }
120                     }
121                 });
122             }
123             //加载首页点击事件
124             $("#a_shou").click(function () {
125                 $.ajax({
126                     type: "POST",
127                     url: "Page.ashx",
128                     dataType: "json",
129                     data: {
130                         action: "clickPageAndGetData",
131                         page: $('#<%=hid_shou.ClientID %>').val(),
132                         search: $("#text_search").val()
133                     },
134                     success: function (data) {
135                         if (data.outStr != "") {
136                             $("#tbody_list").empty();
137                             $("#tbody_list").append(data.outStr);
138                             $("#text_page").val($('#<%=hid_shou.ClientID %>').val());
139                             //将上一页和下一页的变量赋值为首页变量
140                             $('#<%=hid_change.ClientID %>').val($('#<%=hid_shou.ClientID %>').val());
141                         }
142                     }
143                 });
144             });
145             //加载末页点击事件
146             $("#a_last").click(function () {
147                 $.ajax({
148                     type: "POST",
149                     url: "Page.ashx",
150                     dataType: "json",
151                     data: {
152                         action: "clickPageAndGetData",
153                         page: $('#<%=hid_last.ClientID %>').val(),
154                         search: $("#text_search").val()
155                     },
156                     success: function (data) {
157                         if (data.outStr != "") {
158                             $("#tbody_list").empty();
159                             $("#tbody_list").append(data.outStr);
160                             $("#text_page").val($('#<%=hid_last.ClientID %>').val());
161                             //将上一页和下一页的变量赋值为首页变量
162                             $('#<%=hid_change.ClientID %>').val($('#<%=hid_last.ClientID %>').val());
163                         }
164                     }
165                 });
166             });
167             //加载上一页点击事件
168             $("#a_back").click(function () {
169                 //当前页面为首页时,无上一页事件
170                 var back = parseInt($('#<%=hid_change.ClientID %>').val()) - 1;
171                 if (back != 0) {
172                     $.ajax({
173                         type: "POST",
174                         url: "Page.ashx",
175                         dataType: "json",
176                         data: {
177                             action: "clickPageAndGetData",
178                             page: back,
179                             search: $("#text_search").val()
180                         },
181                         success: function (data) {
182                             if (data.outStr != "") {
183                                 $("#tbody_list").empty();
184                                 $("#tbody_list").append(data.outStr);
185                                 $('#<%=hid_change.ClientID %>').val(back);
186                                 $("#text_page").val(back);
187                             }
188                         }
189                     });
190                 }
191             });
192             //加载下一页点击事件
193             $("#a_next").click(function () {
194                 //当前页面为最后一页时,无下一页事件
195                 var next = parseInt($('#<%=hid_change.ClientID %>').val()) + 1;
196                 if ($('#<%=hid_change.ClientID %>').val() != $('#<%=hid_last.ClientID %>').val()) {
197                     $.ajax({
198                         type: "POST",
199                         url: "Page.ashx",
200                         dataType: "json",
201                         data: {
202                             action: "clickPageAndGetData",
203                             page: next,
204                             search: $("#text_search").val()
205                         },
206                         success: function (data) {
207                             if (data.outStr != "") {
208                                 $("#tbody_list").empty();
209                                 $("#tbody_list").append(data.outStr);
210                                 $('#<%=hid_change.ClientID %>').val(next);
211                                 $("#text_page").val(next);
212                             }
213                         }
214                     });
215                 }
216             });
217             //加载确定点击事件
218             $("#a_ok").click(function () {
219                 $.ajax({
220                     type: "POST",
221                     url: "Page.ashx",
222                     dataType: "json",
223                     data: {
224                         action: "clickPageAndGetData",
225                         page: $("#text_page").val(),
226                         search: $("#text_search").val()
227                     },
228                     success: function (data) {
229                         if (data.outStr != "") {
230                             $("#tbody_list").empty();
231                             $("#tbody_list").append(data.outStr);
232                             $('#<%=hid_change.ClientID %>').val($("#text_page").val());
233                         }
234                     }
235                 });
236             });
237         });
238         var record = {
239             num: ""
240         }
241         var checkDecimal = function (n) {
242             var decimalReg = /^[0-9]*[1-9][0-9]*$/;
243             if (n.value != "" && decimalReg.test(n.value)) {
244                 record.num = n.value;
245             } else {
246                 if (n.value != "") {
247                     n.value = record.num;
248                 }
249             }
250         }
251     </script>
252 </head>
253 <body>
254     <form id="form_page" runat="server">
255     <!--页面顶部-->
256     <div id="div_tool">
257         <table width="100%" id="table_tool">
258             <tr>
259                 <td width="50%" style="text-align: center">
260                     请输入食材名称:
261                     <input type="text" id="text_search" />
262                 </td>
263                 <td width="25%">
264                     <input type="button" value="查询" id="btn_search" />
265                 </td>
266                 <td width="25%">
267                     <input type="button" value="删除" style="display: none" id="btn_delete" />
268                 </td>
269             </tr>
270         </table>
271     </div>
272     <br />
273     <!--页面主题部分-->
274     <div id="div_list" style="display: none">
275         <table width="100%" id="table_list">
276             <thead>
277                 <tr>
278                     <th width="25%">
279                         选择
280                     </th>
281                     <th width="25%">
282                         食材名称
283                     </th>
284                     <th width="25%">
285                         食材单位
286                     </th>
287                     <th width="25%">
288                         食材单价
289                     </th>
290                 </tr>
291             </thead>
292             <tbody id="tbody_list">
293             </tbody>
294         </table>
295     </div>
296     <!--始终保持在页面底部-->
297     <div id="div_page" style="position: absolute; bottom: 0; display: none">
298         <table width="100%">
299             <tr>
300                 <td style="text-align: center; width: 100%">
301                     <a href="#" id="a_shou">首页</a> <a href="#" id="a_back">上一页</a>
302                     <input type="text" id="text_page" style="width: 50px;" onkeyup="checkDecimal(this)" />
303                     <a href="#" id="a_next">下一页</a> <a href="#" id="a_last">末页</a> <a href="#" id="a_ok">
304                         确定</a>
305                 </td>
306             </tr>
307         </table>
308     </div>
309     <!--记录点击首页的变量,始终为1-->
310     <asp:HiddenField ID="hid_shou" runat="server" Value="1" />
311     <!--记录点击上一页和下一页的变量-->
312     <asp:HiddenField ID="hid_change" runat="server" />
313     <!--记录点击末页的变量-->
314     <asp:HiddenField ID="hid_last" runat="server" />
315     </form>
316 </body>
317 </html>


开始插入 Page.ashx代码:

1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Web;
5 using System.Data.SqlClient;
6 using System.Data;
7
8 namespace AjaxPage
9 {
10     /// <summary>
11     /// Page 的摘要说明,10条数据分页
12     /// </summary>
13     public class Page : IHttpHandler
14     {
15
16         public void ProcessRequest(HttpContext context)
17         {
18             context.Response.ContentType = "text/plain";
19
20             JSONObject jo = new JSONObject();
21             //取得页面发出的动作
22             string action = context.Request["action"];
23             //取得页面的查询条件
24             string search = context.Request["search"];
25             SqlDataAdapter ad = null;
26             DataSet dsPagecount = new DataSet();
27             DataSet dsOutstr = new DataSet();
28             DataTable dt = new DataTable();
29             string sql = "";
30             string connectstring = "server=localhost;User ID=sa;Password=1;database=SqcpDB;Connection Reset=FALSE";
31             String outStr = String.Empty;
32             string selectsql = "";
33             //页面有查询条件
34             if (search != "")
35             {
36                 selectsql = " where goodsname like '%" + search + "%' ";
37             }
38             //初始化页面以及首页内容
39             if (action == "getFirstPageAndVariable")
40             {
41                 sql = @"select count(goodsid) from GoodsOrderAccept" + selectsql;
42                 ad = new SqlDataAdapter(sql, connectstring);
43                 ad.Fill(dsPagecount);
44                 dt = dsPagecount.Tables[0];
45                 //取得数据总条数
46                 int count = Convert.ToInt32(dt.Rows[0][0]);
47                 //每页10条记录,取得总页数逻辑
48                 int pagecount = count / 10;
49                 if (count % 10 != 0)
50                 {
51                     pagecount++;
52                 }
53                 jo.Add("pagecount", pagecount.ToString());
54                 sql = @"select * from  (select  ROW_NUMBER() over (ORDER BY CREATEDATE) rownum,a.goodsid,a.goodsname,a.itemname,a.price FROM GoodsOrderAccept a " + selectsql + ") t where t.rownum>=0 and t.rownum<=10";
55                 ad = new SqlDataAdapter(sql, connectstring);
56                 ad.Fill(dsOutstr);
57                 dt = dsOutstr.Tables[0];//初始加载首页10条数据
58                 if (null != dt && dt.Rows.Count != 0)
59                 {
60                     foreach (DataRow dr in dt.Rows)//遍历dt以html的格式输出内容
61                     {
62                         outStr += "<tr>";
63                         //给checkbox设置value属性,方便删除
64                         outStr += String.Format("<td style='text-align:center'><input type='checkbox' value='{0}' /></td>", dr["goodsid"]);
65                         outStr += String.Format("<td style='text-align:center'>{0}</td>", dr["goodsname"]);
66                         outStr += String.Format("<td style='text-align:center'>{0}</td>", dr["itemname"]);
67                         outStr += String.Format("<td style='text-align:center'>{0}</td>", dr["price"]);
68                         outStr += "</tr>";
69                     }
70                 }
71                 jo.Add("outStr", outStr);
72                 context.Response.Write(JSONConvert.SerializeObject(jo));
73             }
74             //点击分页按钮时,执行的动作
75             else if (action == "clickPageAndGetData")
76             {
77                 string pagestr = context.Request["page"];
78                 int page = Convert.ToInt32(pagestr);
79                 sql = @"select * from  (select  ROW_NUMBER() over (ORDER BY CREATEDATE) rownum,a.goodsid,a.goodsname,a.itemname,a.price FROM GoodsOrderAccept a " + selectsql + ") t where t.rownum>='" + ((page - 1) * 10 + 1) + "' and t.rownum<='" + page * 10 + "'";
80                 ad = new SqlDataAdapter(sql, connectstring);
81                 ad.Fill(dsOutstr);
82                 dt = dsOutstr.Tables[0];
83                 if (null != dt && dt.Rows.Count != 0)
84                 {
85                     foreach (DataRow dr in dt.Rows)//遍历dt以html的格式输出内容
86                     {
87                         outStr += "<tr>";
88                         //给checkbox设置value属性,方便删除
89                         outStr += String.Format("<td style='text-align:center'><input type='checkbox' value='{0}' /></td>", dr["goodsid"]);
90                         outStr += String.Format("<td style='text-align:center'>{0}</td>", dr["goodsname"]);
91                         outStr += String.Format("<td style='text-align:center'>{0}</td>", dr["itemname"]);
92                         outStr += String.Format("<td style='text-align:center'>{0}</td>", dr["price"]);
93                         outStr += "</tr>";
94                     }
95                 }
96                 jo.Add("outStr", outStr);
97                 context.Response.Write(JSONConvert.SerializeObject(jo));
98             }
99             //点击删除按钮时,执行的动作
100             else if (action == "deleteData")
101             {
102                 String[] postDatas = context.Request["deleteData"].Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
103                 SqlConnection conn = new SqlConnection(connectstring);
104                 conn.Open();
105                 foreach (String pd in postDatas)
106                 {
107                     String[] pdArr = pd.Split(",".ToCharArray());
108                     sql = @"delete from GoodsOrderAccept where goodsid='" + pdArr[0] + "'";
109                     SqlCommand cmd = new SqlCommand(sql, conn);
110                     cmd.ExecuteNonQuery();
111                 }
112                 conn.Close();
113                 jo.Add("status", "success");
114                 context.Response.Write(JSONConvert.SerializeObject(jo));
115             }
116             //删除成功后,固定到当前页
117             else if (action == "getDeletePageAndVariable")
118             {
119                 string hid_changestr = context.Request["hid_change"];
120                 int hid_change = Convert.ToInt32(hid_changestr);
121                 sql = @"select count(goodsid) from GoodsOrderAccept" + selectsql;
122                 ad = new SqlDataAdapter(sql, connectstring);
123                 ad.Fill(dsPagecount);
124                 dt = dsPagecount.Tables[0];
125                 int count = Convert.ToInt32(dt.Rows[0][0]);
126                 int pagecount = count / 10;
127                 if (count % 10 != 0)
128                 {
129                     pagecount++;
130                 }
131                 jo.Add("pagecount", pagecount.ToString());//每页10条记录,取得总页数
132                 if (hid_change > pagecount)
133                 {
134                     hid_change = pagecount;
135                 }
136                 jo.Add("hid_change", hid_change.ToString());
137                 sql = @"select * from  (select  ROW_NUMBER() over (ORDER BY CREATEDATE) rownum,a.goodsid,a.goodsname,a.itemname,a.price FROM GoodsOrderAccept a " + selectsql + ") t where t.rownum>='" + ((hid_change - 1) * 10 + 1) + "' and t.rownum<='" + hid_change * 10 + "'";
138                 ad = new SqlDataAdapter(sql, connectstring);
139                 ad.Fill(dsOutstr);
140                 dt = dsOutstr.Tables[0];
141                 if (null != dt && dt.Rows.Count != 0)
142                 {
143                     foreach (DataRow dr in dt.Rows)//遍历dt以html的格式输出内容
144                     {
145                         outStr += "<tr>";
146                         //给checkbox设置value属性,方便删除
147                         outStr += String.Format("<td style='text-align:center'><input type='checkbox' value='{0}' /></td>", dr["goodsid"]);
148                         outStr += String.Format("<td style='text-align:center'>{0}</td>", dr["goodsname"]);
149                         outStr += String.Format("<td style='text-align:center'>{0}</td>", dr["itemname"]);
150                         outStr += String.Format("<td style='text-align:center'>{0}</td>", dr["price"]);
151                         outStr += "</tr>";
152                     }
153                 }
154                 jo.Add("outStr", outStr);
155                 context.Response.Write(JSONConvert.SerializeObject(jo));
156             }
157         }
158
159         public bool IsReusable
160         {
161             get
162             {
163                 return false;
164             }
165         }
166     }
167 }


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: