jquery pagination 实现无刷新的分页

电玩女神 2022-08-24 04:12 309阅读 0赞

首先,我们要准备的文件有:jquery.js,jquery.pagination.js,pagination.css,还有一个就是经常用的table布局的css文件。这些文件都会在后面的文件中包含。

先把要用到的文件依次进入进来:

  1. <script src="common/jquery.js" type="text/javascript"></script>
  2. <script src="common/jquery.pagination.js" type="text/javascript"></script>
  3. <link href="common/tablesorter.css" rel="stylesheet" type="text/css" />
  4. <link href="common/pagination.css" rel="stylesheet" type="text/css" />

接着在页面的body里面写入如下的代码,在这里强调一下呈现出来的数据是没有进行控件绑定的,完全是由简单的table来呈现数据的,先看一下页面代码

  1. <div>
  2. <table id="linkTable" cellpadding="6" cellspacing="1" align="left" class="tablesorter" style="width:400px;margin:0 0 20px 5px;">
  3. <thead>
  4. <tr class="tableHeader" align="center">
  5. <th style="width:200px; text-align:center;" >
  6. 产品名称
  7. </th>
  8. <th style="width:200px; text-align:center">
  9. 产品单价
  10. </th>
  11. </tr>
  12. </thead>
  13. </table>
  14. </div>
  15. <div id="Pagination" class="digg"></div>

我们先分析一下代码,很明显我们设定了一个标准的带有的表格,然后再加上了我们使用到的Jquery的插件—Paination,在这里我们只需定义一下一个以id为Pagination的层就可以了。页面的代码我们分析到这里,下面就来看一下关键的js代码

  1. <script language="javascript" type="text/javascript">
  2. var orderby = ""; //进行排序的依据
  3. $(document).ready(function() {
  4. InitData(0); //初始化数据
  5. });
  6. //这个事件是在翻页时候用的
  7. function pageselectCallback(page_id, jq) {
  8. InitData(page_id);
  9. }
  10. function InitData(pageIndex) {
  11. var tbody = ""; //声明表格中body部分
  12. $.ajax({ //这里使用到Jquery的ajax方法,具体使用在这里不详细叙述
  13. type: "POST",
  14. dataType: "json",
  15. url: '/DataListWeb/WebService/GetData.ashx', //请求的处理数据
  16. data: "pageIndex=" + (pageIndex + 1) + "&sortType=" + orderby,
  17. //传入的参数,第一个参数就是分页的页数,第二个参数为排序的依据
  18. //下面的操作就是成功返回数据以后,进行数据的绑定
  19. success: function(data) {
  20. $("#linkTable tr:gt(0)").remove();
  21. var myData = data.Products;
  22. $.each(myData, function(i, n) {
  23. var trs = "";
  24. trs += "<tr><td align='center'>" + n.ProductName + "</td><td>" + n.QuantityPerUnit + "</td></tr>";
  25. tbody += trs;
  26. });
  27. $("#linkTable").append(tbody);
  28. }
  29. });
  30. //加入分页的绑定
  31. $("#Pagination").pagination(<%=pageCount %>, {
  32. callback: pageselectCallback,
  33. prev_text: '< 上一页',
  34. next_text: '下一页 >',
  35. items_per_page: 20,
  36. num_display_entries: 6,
  37. current_page: pageIndex,
  38. num_edge_entries: 2
  39. });
  40. }
  41. </script>

这样我们页面所要进行的操作就完成了,注释都写入上面了,如果有什么看不明白的,可以联系我哦。下面我就要看看关键的GetData.ashx是如何进行数据操作的,在这里先提示一下,我是用到了SqlHelper类进行sql语句操作的,再辅以分页的存储过程,然后又用到Json.NET,将从数据库得到的数据转换成json,现在发现json真是个好东西的,操作起来比较简便。废话不多说了呈上代码,代码还是有说服力的。虽然写得比较简单。

  1. string strConn = ConfigurationManager.AppSettings["ConnectionString"];
  2. //具体的页面数
  3. int pageIndex;
  4. int.TryParse(context.Request["pageIndex"], out pageIndex);
  5. //排序的依据
  6. string orderType = "ProductID";
  7. int sortType = 1;
  8. if (!string.IsNullOrEmpty(context.Request["sortType"]))
  9. {
  10. string[] strArr = context.Request["sortType"].Split('_');
  11. if (strArr[1] == "0")
  12. {
  13. orderType = strArr[0];
  14. sortType = 0;
  15. }
  16. else
  17. {
  18. orderType = strArr[0];
  19. sortType = 1;
  20. }
  21. }
  22. if (pageIndex == 0)
  23. {
  24. pageIndex = 1;
  25. }
  26. //下面就是分页的存储过程了,把相应的参数传进去就可以了。
  27. System.Data.SqlClient.SqlParameter[] p =
  28. {
  29. SqlHelper.MakeOutParam("@Counts", SqlDbType.Int, 4),
  30. SqlHelper.MakeInParam("@tblName", SqlDbType.VarChar, 128, "Products"),
  31. SqlHelper.MakeInParam("@strGetFields", SqlDbType.VarChar,200, "ProductName,QuantityPerUnit"),
  32. SqlHelper.MakeInParam("@fldName", SqlDbType.VarChar, 128, orderType),
  33. SqlHelper.MakeInParam("@PageSize", SqlDbType.Int, 4, 20),
  34. SqlHelper.MakeInParam("@PageIndex", SqlDbType.Int, 1, pageIndex),
  35. SqlHelper.MakeInParam("@OrderType", SqlDbType.Bit, 1, sortType),
  36. SqlHelper.MakeInParam("@strWhere", SqlDbType.VarChar, 1500, "")
  37. };
  38. DataTable dt = SqlHelper.ExecuteDataset(strConn, CommandType.StoredProcedure, "sp_PageCut", p).Tables[0];
  39. int pageCount = Convert.ToInt32(p[0].Value.ToString());
  40. //将得到的数据转换成json
  41. context.Response.Write(Util.DataTableToJSON(dt, "Products", pageCount));

下面我们看看DataTableToJson这个方法的代码,这个比较简单,我也是看它的帮助文档写出来的,代码的详细说明就不说了。

  1. public static string DataTableToJSON(DataTable dt, string tableName, int pageCount)
  2. {
  3. StringBuilder sb = new StringBuilder();
  4. StringWriter sw = new StringWriter(sb);
  5. using (JsonWriter jw = new JsonTextWriter(sw))
  6. {
  7. JsonSerializer ser = new JsonSerializer();
  8. jw.WriteStartObject();
  9. jw.WritePropertyName(tableName);
  10. jw.WriteStartArray();
  11. #region TableName属性
  12. foreach (DataRow dr in dt.Rows)
  13. {
  14. jw.WriteStartObject();
  15. foreach (DataColumn dc in dt.Columns)
  16. {
  17. jw.WritePropertyName(dc.ColumnName);
  18. ser.Serialize(jw, dr[dc].ToString());
  19. }
  20. jw.WriteEndObject();
  21. }
  22. #endregion
  23. jw.WriteEndArray();
  24. jw.WriteEndObject();
  25. sw.Close();
  26. jw.Close();
  27. }
  28. return sb.ToString();
  29. }

这样我们的工作基本上就完成了,声明绑定的table,然后在服务端获取数据,再把得到的数据转化成json,在页面里面将数据绑定完成,一气呵成真是不错,看得呈现的数据心里比较美吧,不过这个时候你也许会发现,页面怎么只用一页呢,嘻嘻,别忘了一点—-就是取出数据的总数,用过分页的都知道,是根据记录的总数来计算到底有多少页的哦。那么我们该怎么做呢?

其实比较简单哦,在页面的Page_Load中得到数据的总数就可以了,然后将其进行数据绑定,不信你去看看前面的代码,是不是有句

  1. $("#Pagination").pagination(<%=pageCount %>这个就是起到了记录总数的作用。
  2. if (!IsPostBack)
  3. {
  4. SqlParameter[] p =
  5. {
  6. SqlHelper.MakeOutParam("@Counts", SqlDbType.Int, 4),
  7. SqlHelper.MakeInParam("@tblName", SqlDbType.VarChar, 128, "Products"),
  8. SqlHelper.MakeInParam("@strGetFields", SqlDbType.VarChar,200, "*"),
  9. SqlHelper.MakeInParam("@fldName", SqlDbType.VarChar, 128, "ProductID"),
  10. SqlHelper.MakeInParam("@PageSize", SqlDbType.Int, 4, 20),
  11. SqlHelper.MakeInParam("@PageIndex", SqlDbType.Int, 1, 1),
  12. SqlHelper.MakeInParam("@OrderType", SqlDbType.Bit, 1, 0),
  13. SqlHelper.MakeInParam("@strWhere", SqlDbType.VarChar, 1500, "")
  14. };
  15. DataTable dt = SqlHelper.ExecuteDataset(conn, CommandType.StoredProcedure, "sp_PageCut", p).Tables[0];
  16. pageCount = Convert.ToInt32(p[0].Value.ToString());
  17. }

至此,整篇介绍如何利用jquery的插件—-pagination进行分页就介绍到这里,简单的回顾一下就是声明绑定的table,利用jquery的ajax方法进行数据绑定的,然后在后台得到数据转换为json,整个流程就是这样的,也许你会觉得这样做比较繁琐,不知你有何高见,可以在下面的评论为我点出,我不胜感激哦。^_^。写博客真的是一件挺费神的事情,不过在写的过程中,又让自己巩固了一下这些知识,也是很不错的。就请各位看官评论吧。

经过请教了美工了,把页面中分页的效果做成了gif图片,大家看看图吧。
E6_9C_AA_E5_91_BD_E5_90_8D-1.gif

发表评论

表情:
评论列表 (有 0 条评论,309人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Ajax实现刷新效果

    一、无刷新分页技术的必要性 ![70][]   如果我们通过“传统方式”实现上图的商品分页效果,每次分页的时候就会使得头部、左侧、底部等已经显示的信息重新从服务器获得出