基于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;

        }

测试结果

基于easyui datagrid后台分页实现

总结:一般的前端列表都支持分页,只要获取页码和行数两个参数,就可以通过后台查询数据库,或者编码中进行分页计算都可以实现,sql中分页相对较多,主要是通过ROW_NUMBER() over(order by 字段)来获取排序后的行号,然后进行数据范围查询即可。