基于easyui datagrid后台分页实现
easyui datagrid 前台提供分页机制,默认给提供page、rows页码和行数的参数,因此要实现后台分页只需要获取前台的这两个参数配合后台sql的处理可实现分页,具体操作如下:
根据page和rows 计算出前后页的数量
int startPagenum = rows*(page-1);//开始数量
int endPagenum = rows * page;//结束时数量
根据查询结果获取总数total,用于分页总数;
利用startPagenum ,endPagenum 通过sql返回的索引进行排序查询,具体如下:
select * from (
select ROW_NUMBER() over(order by 字段) rownum ,* from t_Table ) t1
where rownum <="+endPagenum +" and rownum >"+startPagenum +" 可以获取间隔内的数据,也就是每个分页的数据。
具体代码
///<summary>
///根据参数进行分页读取数据集zzjgbDAL
///<summary>
///<returns>zzjgbDAL集合</returns>
public IList<BoundsData> SelectPageList(int page, int rows, string sqlWhere, out int totalRecord, string order, string sort)
{
int startPagenum = rows*(page-1);//开始数量
int endPagenum = rows * page;//结束时数量
StringBuilder strSql = new StringBuilder();
StringBuilder strWhere = new StringBuilder(sqlWhere);
strSql.Append("select count(1) totalNum from( SELECT zzjg.dwmc, gps.Fiveofficertype FROM dbo.t_MiddleGPS AS gps RIGHT OUTER JOIN dbo.t_zzjgb AS zzjg ON gps.bmmc = zzjg.dwmc ");
if (strWhere.Length > 0) { strSql.AppendFormat(" Where {0}", strWhere.ToString()); }
strSql.Append(" GROUP BY zzjg.dwmc, gps.Fiveofficertype ) rownumber ");
totalRecord = 0;
SQLDBHelper sqlhelper = new SQLDBHelper();
object obj = sqlhelper.GetScalar(strSql.ToString());
if (obj != null)
{
totalRecord = Convert.ToInt32(obj);
if (totalRecord <= 0) { return default(List<BoundsData>); };//获取总数
}
strSql.Clear();
strSql.Append(" select * from( ");
strSql.Append(" SELECT ROW_NUMBER() over(order by dwmc ) rownumber, zzjg.dwmc, SUM(gps.Scores) AS totalS, gps.Fiveofficertype FROM dbo.t_MiddleGPS AS gps RIGHT OUTER JOIN ");
strSql.Append(" dbo.t_zzjgb AS zzjg ON gps.bmmc = zzjg.dwmc ");
// strSql.Append(" select count(1) from V_BoundsData ");
if (strWhere.Length > 0) { strSql.AppendFormat(" Where {0}"," "+ strWhere.ToString()); }
strSql.Append(" or CreateDate is null GROUP BY zzjg.dwmc, gps.Fiveofficertype ) rownumber where rownumber <=" + endPagenum + " and rownumber>"+startPagenum+" ");//数据库查询分页
SqlConnection con = new SqlConnection();
SqlDataReader dr = SQLDBHelper.ExecuteReader(strSql.ToString(), out con);
List<BoundsData> list = new List<BoundsData>();
while (dr.Read())
{
BoundsData model = BuildEntityView(dr);
list.Add(model);
}
dr.Close();
con.Close();
return list;
}
测试结果
总结:一般的前端列表都支持分页,只要获取页码和行数两个参数,就可以通过后台查询数据库,或者编码中进行分页计算都可以实现,sql中分页相对较多,主要是通过ROW_NUMBER() over(order by 字段)来获取排序后的行号,然后进行数据范围查询即可。