基於asp.net + easyui框架,一步步學習easyui-datagrid——實現分頁和搜尋(二)
目錄:
上篇部落格我只是將介面的部分完成了,繼續上篇部落格的內容,這篇部落格我們需要將資料庫中的記錄顯示到介面上,並實現資料的分頁顯示。
曾經我寫過分頁的部落格,分頁很簡單, 本質區別在於分頁時從資料庫讀取資訊的方式:假分頁:一次性讀取資料;真分頁:多次讀取資料。datagrid使用的是真分頁,將記錄從資料庫查詢出來就行了。
下面我們看一下要實現的介面:
說實話,載入資料並實現分頁和搜尋的功能相對而言是很簡單,無非就是呼叫一般處理程式,只要你會一般處理程式就沒有任何問題。
在上篇部落格中,我已將datagrid要呼叫的一般處理程式的URL寫好了,所以我們現在只需要寫一般處理程式的程式碼和後臺的程式碼就好了。在一般處理程式中,我們將分頁和查詢功能巧妙的整合到了一起。
搜尋的js程式碼
//獲取引數 function getQueryParams(queryParams) { var StartTime = $("#StartTime").datebox("getValue"); var EndTime = $("#EndTime").datebox("getValue"); var AdminName = document.getElementById("AdminName").value; var QuanXian = document.getElementById("quanxian").value; //$("#quanxian").combobox("getValue"); queryParams.StartTime = StartTime; queryParams.EndTime = EndTime; queryParams.AdminName = AdminName; queryParams.QuanXian = QuanXian; return queryParams; } //增加查詢引數,重新載入表格 function reloadgrid() { //查詢引數直接新增在queryParams中 var queryParams = $('#tt').datagrid('options').queryParams; getQueryParams(queryParams); $('#tt').datagrid('options').queryParams = queryParams; $("#tt").datagrid('reload'); }
一般處理程式SetAdmin.ashx
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data; using System.Text; namespace GoodCommunitySystem.admin.UserManager { /// <summary> /// SetAdmin 的摘要說明 /// </summary> public class SetAdmin : IHttpHandler { BLL.adminInfoBLL admininfobll = new BLL.adminInfoBLL(); Entity.adminInfoEntity enadmininfo = new Entity.adminInfoEntity(); public void ProcessRequest(HttpContext context) { //呼叫查詢方法 Query(context); } public bool IsReusable { get { return false; } } /// <summary> /// 查詢記錄 /// </summary> /// <param name="context"></param> public void Query(HttpContext context) { context.Response.ContentType = "text/plain"; //=============================================================== //獲取查詢條件:【使用者id,開始時間,結束時間,關鍵字】 string AdminName, startTime, endTime, QuanXian; AdminName = startTime = endTime = QuanXian = ""; //獲取前臺傳來的值 if (null != context.Request.QueryString["AdminName"]) {//獲取前臺傳來的值 AdminName = context.Request.QueryString["AdminName"].ToString().Trim(); } if (null != context.Request.QueryString["StartTime"]) { startTime = context.Request.QueryString["StartTime"].ToString().Trim(); } if (null != context.Request.QueryString["EndTime"]) { endTime = context.Request.QueryString["EndTime"].ToString().Trim(); } if (null != context.Request.QueryString["QuanXian"]) { QuanXian = context.Request.QueryString["QuanXian"].ToString().Trim(); } //================================================================ //獲取分頁和排序資訊:頁大小,頁碼,排序方式,排序欄位 int pageRows, page; pageRows = 10; page = 1; string order, sort, oderby; order = sort = oderby = ""; if (null != context.Request.QueryString["rows"]) { pageRows = int.Parse(context.Request.QueryString["rows"].ToString().Trim()); } if (null != context.Request.QueryString["page"]) { page = int.Parse(context.Request.QueryString["page"].ToString().Trim()); } if (null != context.Request.QueryString["sort"]) { order = context.Request.QueryString["sort"].ToString().Trim(); } if (null != context.Request.QueryString["order"]) { sort = context.Request.QueryString["order"].ToString().Trim(); } //=================================================================== //組合查詢語句:條件+排序 StringBuilder strWhere = new StringBuilder(); if (AdminName != "") { strWhere.AppendFormat(" WorkerRealName like '%{0}%' and ", AdminName); } if (QuanXian != "") { strWhere.AppendFormat(" AdminRightName like '%{0}%' and ", QuanXian); } if (startTime != "") { strWhere.AppendFormat(" ActiveDate >= '{0}' and ", startTime); } if (endTime != "") { strWhere.AppendFormat(" ActiveDate <= '{0}' and ", endTime); } //刪除多餘的and int startindex = strWhere.ToString().LastIndexOf("and");//獲取最後一個and的位置 if (startindex >= 0) { strWhere.Remove(startindex, 3);//刪除多餘的and關鍵字 } if (sort != "" && order != "") { //strWhere.AppendFormat(" order by {0} {1}", sort, order);//新增排序 oderby = order + " " + sort; } //DataSet ds = Bnotice.GetList(strWhere.ToString()); //呼叫不分頁的getlist //呼叫分頁的GetList方法 DataSet ds = admininfobll.GetListByPage(strWhere.ToString(), oderby, (page - 1) * pageRows + 1, page * pageRows); int count = admininfobll.GetRecordCount(strWhere.ToString());//獲取條數 string strJson = ToJson.Dataset2Json(ds, count);//DataSet資料轉化為Json資料 context.Response.Write(strJson);//返回給前臺頁面 context.Response.End(); } }
呼叫D層實現分頁的兩個方法:
/// <summary>
/// 獲取記錄總數
/// </summary>
public int GetRecordCount(string strWhere)
{
StringBuilder strSql=new StringBuilder();
strSql.Append("select count(1) FROM V_admin_MgPersonFiles ");
if(strWhere.Trim()!="")
{
strSql.Append(" where "+strWhere);
}
object obj = DbHelperSQL.GetSingle(strSql.ToString());
if (obj == null)
{
return 0;
}
else
{
return Convert.ToInt32(obj);
}
}
/// <summary>
/// 分頁獲取資料列表
/// </summary>
public DataSet GetListByPage(string strWhere, string orderby, int startIndex, int endIndex)
{
StringBuilder strSql=new StringBuilder();
strSql.Append("SELECT * FROM ( ");
strSql.Append(" SELECT ROW_NUMBER() OVER (");
if (!string.IsNullOrEmpty(orderby.Trim()))
{
strSql.Append("order by T." + orderby );
}
else
{
strSql.Append("order by T.AdminID desc");
}
strSql.Append(")AS Row, T.* from V_admin_MgPersonFiles T ");
if (!string.IsNullOrEmpty(strWhere.Trim()))
{
strSql.Append(" WHERE " + strWhere);
}
strSql.Append(" ) TT");
strSql.AppendFormat(" WHERE TT.Row between {0} and {1}", startIndex, endIndex);
return DbHelperSQL.Query(strSql.ToString());
}
上面還有一個難點是:將dataset的資料集轉換成json格式,下面我封裝了一個類:ToJson
public class ToJson
{
#region DataSet轉換成Json格式
/// <summary>
/// DataSet轉換成Json格式
/// </summary>
/// <param name="ds">DataSet</param>
/// <returns></returns>
public static string Dataset2Json(DataSet ds, int total = -1)
{
StringBuilder json = new StringBuilder();
foreach (DataTable dt in ds.Tables)
{
//{"total":5,"rows":[
json.Append("{\"total\":");
if (total == -1)
{
json.Append(dt.Rows.Count);
}
else
{
json.Append(total);
}
json.Append(",\"rows\":[");
json.Append(DataTable2Json(dt));
json.Append("]}");
} return json.ToString();
}
#endregion
#region dataTable轉換成Json格式
/// <summary>
/// dataTable轉換成Json格式
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string DataTable2Json(DataTable dt)
{
StringBuilder jsonBuilder = new StringBuilder();
for (int i = 0; i < dt.Rows.Count; i++)
{
jsonBuilder.Append("{");
for (int j = 0; j < dt.Columns.Count; j++)
{
jsonBuilder.Append("\"");
jsonBuilder.Append(dt.Columns[j].ColumnName);
jsonBuilder.Append("\":\"");
jsonBuilder.Append(dt.Rows[i][j].ToString());
jsonBuilder.Append("\",");
}
if (dt.Columns.Count > 0)
{
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
}
jsonBuilder.Append("},");
}
if (dt.Rows.Count > 0)
{
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
}
return jsonBuilder.ToString();
}
#endregion dataTable轉換成Json格式
}
這篇部落格主要給大家介紹datagrid如何實現分頁和搜尋的功能。真的跟宣傳廣告一樣,It's so easy。。。
========================================================================================================================
基於asp.net+easyui框架的系列博文:
=========================================================================================================================
對於json:不知道怎麼傳值?不知道返回什麼樣值?不知道如何拼接json串的童鞋有福了,給大家推薦一篇文章: