上篇博客我只是将界面的部分完成了,继续上篇博客的内容,这篇博客我们需要将数据库中的记录显示到界面上,并实现数据的分页显示。
曾经我写过分页的博客,分页很简单, 本质区别在于分页时从数据库读取信息的方式:假分页:一次性读取数据;真分页:多次读取数据。datagrid使用的是真分页,将记录从数据库查询出来就行了。
下面我们看一下要实现的界面:

说实话,加载数据并实现分页和搜索的功能相对而言是很简单,无非就是调用一般处理程序,只要你会一般处理程序就没有任何问题。
在上篇博客中,我已将datagrid要调用的一般处理程序的URL写好了,所以我们现在只需要写一般处理程序的代码和后台的代码就好了。在一般处理程序中,我们将分页和查询功能巧妙的整合到了一起。
-
//获取参数
-
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();
-
-
}
-
}
注:不知道前台页面怎么接收数据,请看第一篇博文:基于asp.net
+ easyui框架,一步步学习easyui-datagrid——界面(一)
调用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如何实现分页和搜索的功能。