先把要用到的文件依次進(jìn)入進(jìn)來(lái):
復制代碼 代碼如下:
<script src="common/jquery.js" type="text/javascript"></script>
<script src="common/jquery.pagination.js" type="text/javascript"></script>
<link href="common/tablesorter.css" rel="stylesheet" type="text/css" />
<link href="common/pagination.css" rel="stylesheet" type="text/css" />
接著(zhù)在頁(yè)面的body里面寫(xiě)入如下的代碼,在這里強調一下呈現出來(lái)的數據是沒(méi)有進(jìn)行控件綁定的,完全是由簡(jiǎn)單的table來(lái)呈現數據的,先看一下頁(yè)面代碼
復制代碼 代碼如下:
<div>
<table id="linkTable" cellpadding="6" cellspacing="1" align="left" class="tablesorter" style="width:400px;margin:0 0 20px 5px;">
<thead>
<tr class="tableHeader" align="center">
<th style="width:200px; text-align:center;" >
產(chǎn)品名稱(chēng)
</th>
<th style="width:200px; text-align:center">
產(chǎn)品單價(jià)
</th>
</tr>
</thead>
</table>
</div>
<div id="Pagination" class="digg"></div>
我們先分析一下代碼,很明顯我們設定了一個(gè)標準的帶有<thead>的表格,然后再加上了我們使用到的Jquery的插件—Paination,在這里我們只需定義一下一個(gè)以id為Pagination的層就可以了。頁(yè)面的代碼我們分析到這里,下面就來(lái)看一下關(guān)鍵的js代碼
復制代碼 代碼如下:
<script language="javascript" type="text/javascript">
var orderby = ""; //進(jìn)行排序的依據
$(document).ready(function() {
InitData(0); //初始化數據
});
//這個(gè)事件是在翻頁(yè)時(shí)候用的
function pageselectCallback(page_id, jq) {
InitData(page_id);
}
function InitData(pageIndex) {
var tbody = ""; //聲明表格中body部分
$.ajax({ //這里使用到Jquery的ajax方法,具體使用在這里不詳細敘述
type: "POST",
dataType: "json",
url: '/DataListWeb/WebService/GetData.ashx', //請求的處理數據
data: "pageIndex=" + (pageIndex + 1) + "&sortType=" + orderby,
//傳入的參數,第一個(gè)參數就是分頁(yè)的頁(yè)數,第二個(gè)參數為排序的依據
//下面的操作就是成功返回數據以后,進(jìn)行數據的綁定
success: function(data) {
$("#linkTable tr:gt(0)").remove();
var myData = data.Products;
$.each(myData, function(i, n) {
var trs = "";
trs += "<tr><td align='center'>" + n.ProductName + "</td><td>" + n.QuantityPerUnit + "</td></tr>";
tbody += trs;
});
$("#linkTable").append(tbody);
}
});
//加入分頁(yè)的綁定
$("#Pagination").pagination(<%=pageCount %>, {
callback: pageselectCallback,
prev_text: '< 上一頁(yè)',
next_text: '下一頁(yè) >',
items_per_page: 20,
num_display_entries: 6,
current_page: pageIndex,
num_edge_entries: 2
});
}
</script>
這樣我們頁(yè)面所要進(jìn)行的操作就完成了,注釋都寫(xiě)入上面了,如果有什么看不明白的,可以聯(lián)系我哦。下面我就要看看關(guān)鍵的GetData.ashx是如何進(jìn)行數據操作的,在這里先提示一下,我是用到了SqlHelper類(lèi)進(jìn)行sql語(yǔ)句操作的,再輔以分頁(yè)的存儲過(guò)程,然后又用到Json.NET,將從數據庫得到的數據轉換成json,現在發(fā)現json真是個(gè)好東西的,操作起來(lái)比較簡(jiǎn)便。廢話(huà)不多說(shuō)了呈上代碼,代碼還是有說(shuō)服力的。雖然寫(xiě)得比較簡(jiǎn)單。
復制代碼 代碼如下:
string strConn = ConfigurationManager.AppSettings["ConnectionString"];
//具體的頁(yè)面數
int pageIndex;
int.TryParse(context.Request["pageIndex"], out pageIndex);
//排序的依據
string orderType = "ProductID";
int sortType = 1;
if (!string.IsNullOrEmpty(context.Request["sortType"]))
{
string[] strArr = context.Request["sortType"].Split('_');
if (strArr[1] == "0")
{
orderType = strArr[0];
sortType = 0;
}
else
{
orderType = strArr[0];
sortType = 1;
}
}
if (pageIndex == 0)
{
pageIndex = 1;
}
//下面就是分頁(yè)的存儲過(guò)程了,把相應的參數傳進(jìn)去就可以了。
System.Data.SqlClient.SqlParameter[] p =
{
SqlHelper.MakeOutParam("@Counts", SqlDbType.Int, 4),
SqlHelper.MakeInParam("@tblName", SqlDbType.VarChar, 128, "Products"),
SqlHelper.MakeInParam("@strGetFields", SqlDbType.VarChar,200, "ProductName,QuantityPerUnit"),
SqlHelper.MakeInParam("@fldName", SqlDbType.VarChar, 128, orderType),
SqlHelper.MakeInParam("@PageSize", SqlDbType.Int, 4, 20),
SqlHelper.MakeInParam("@PageIndex", SqlDbType.Int, 1, pageIndex),
SqlHelper.MakeInParam("@OrderType", SqlDbType.Bit, 1, sortType),
SqlHelper.MakeInParam("@strWhere", SqlDbType.VarChar, 1500, "")
};
DataTable dt = SqlHelper.ExecuteDataset(strConn, CommandType.StoredProcedure, "sp_PageCut", p).Tables[0];
int pageCount = Convert.ToInt32(p[0].Value.ToString());
//將得到的數據轉換成json
context.Response.Write(Util.DataTableToJSON(dt, "Products", pageCount));
下面我們看看DataTableToJson這個(gè)方法的代碼,這個(gè)比較簡(jiǎn)單,我也是看它的幫助文檔寫(xiě)出來(lái)的,代碼的詳細說(shuō)明就不說(shuō)了。
public static string DataTableToJSON(DataTable dt, string tableName, int pageCount)
{
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
using (JsonWriter jw = new JsonTextWriter(sw))
{
JsonSerializer ser = new JsonSerializer();
jw.WriteStartObject();
jw.WritePropertyName(tableName);
jw.WriteStartArray();
#region TableName屬性
foreach (DataRow dr in dt.Rows)
{
jw.WriteStartObject();
foreach (DataColumn dc in dt.Columns)
{
jw.WritePropertyName(dc.ColumnName);
ser.Serialize(jw, dr[dc].ToString());
}
jw.WriteEndObject();
}
#endregion
jw.WriteEndArray();
jw.WriteEndObject();
sw.Close();
jw.Close();
}
return sb.ToString();
}
這樣我們的工作基本上就完成了,聲明綁定的table,然后在服務(wù)端獲取數據,再把得到的數據轉化成json,在頁(yè)面里面將數據綁定完成,一氣呵成真是不錯,看得呈現的數據心里比較美吧,不過(guò)這個(gè)時(shí)候你也許會(huì )發(fā)現,頁(yè)面怎么只用一頁(yè)呢,嘻嘻,別忘了一點(diǎn)---就是取出數據的總數,用過(guò)分頁(yè)的都知道,是根據記錄的總數來(lái)計算到底有多少頁(yè)的哦。那么我們該怎么做呢?
其實(shí)比較簡(jiǎn)單哦,在頁(yè)面的Page_Load中得到數據的總數就可以了,然后將其進(jìn)行數據綁定,不信你去看看前面的代碼,是不是有句
復制代碼 代碼如下:
$("#Pagination").pagination(<%=pageCount %>這個(gè)就是起到了記錄總數的作用。
if (!IsPostBack)
{
SqlParameter[] p =
{
SqlHelper.MakeOutParam("@Counts", SqlDbType.Int, 4),
SqlHelper.MakeInParam("@tblName", SqlDbType.VarChar, 128, "Products"),
SqlHelper.MakeInParam("@strGetFields", SqlDbType.VarChar,200, "*"),
SqlHelper.MakeInParam("@fldName", SqlDbType.VarChar, 128, "ProductID"),
SqlHelper.MakeInParam("@PageSize", SqlDbType.Int, 4, 20),
SqlHelper.MakeInParam("@PageIndex", SqlDbType.Int, 1, 1),
SqlHelper.MakeInParam("@OrderType", SqlDbType.Bit, 1, 0),
SqlHelper.MakeInParam("@strWhere", SqlDbType.VarChar, 1500, "")
};
DataTable dt = SqlHelper.ExecuteDataset(conn, CommandType.StoredProcedure, "sp_PageCut", p).Tables[0];
pageCount = Convert.ToInt32(p[0].Value.ToString());
}
至此,整篇介紹如何利用jquery的插件---pagination進(jìn)行分頁(yè)就介紹到這里,簡(jiǎn)單的回顧一下就是聲明綁定的table,利用jquery的ajax方法進(jìn)行數據綁定的,然后在后臺得到數據轉換為json,整個(gè)流程就是這樣的,也許你會(huì )覺(jué)得這樣做比較繁瑣,不知你有何高見(jiàn),可以在下面的評論為我點(diǎn)出,我不勝感激哦。^_^。寫(xiě)博客真的是一件挺費神的事情,不過(guò)在寫(xiě)的過(guò)程中,又讓自己鞏固了一下這些知識,也是很不錯的。就請各位看官評論吧。
經(jīng)過(guò)請教了美工了,把頁(yè)面中分頁(yè)的效果做成了gif圖片,大家看看圖吧。