真假分页

来源:互联网 发布:公仔设计软件 编辑:程序博客网 时间:2024/06/09 17:27

引言:

    最近的做的积分系统中加载所有的用户时需要进行分页显示,以前在牛腩的时候接触过,在ITOO里面也见过,但是自己去写还是不太会,那就查呗,有两种方式可以实现:真分页、假分页。


假分页:

    假分页比较容易实现,代码都写在了js里。

初始化表格显示:

  function initTable() {    //把搜素框里的内容提交到后台对数据进行过滤。      $('#dg').datagrid({       url: '/frmManageUser/QueryUser',        width: "100%",        striped: true, //行背景交换                         fitColumns: true,        idField: 'AssignmentID',        loadMsg: '正在加载用户的信息...',        pagination: true,        singleSelect: false,        pageList: [10, 20, 30, 40, 50], //每页多少条数据        pageSize: 10,       //默认每页显示10条        pageNumber: 1,     //默认为第一页        rowNumbers:true,        queryParams: {            searchName: $("#searchName").val()        },        columns: [[                { field: 'ck', checkbox: true, align: 'left', width: 50 },                { field: 'UserId', title: 'userId', width: 500, hidden: true },                { field: 'UserName', title: '期数', width: 50, editor: 'text' },                { field: 'PassWord', title: '姓名', width: 50, editor: 'text' },                { field: 'TeamNum', title: '小区号', width: 50, editor: 'text' },        ]]    });   }
// 分页数据的操作  function pagerfilter(data) {    if (typeof data.length == 'number' && typeof data.splice == 'function') {   // is array          data = {            total: data.length,            rows: data        }    }    var dg = $(this);    var opts = dg.datagrid('options');    var pager = dg.datagrid('getpager');    pager.pagination({        //选择每页显示多少条数据,从第几页开始        onselectpage: function (pagenum, pagesize) {            opts.pagenumber = pagenum;            opts.pagesize = pagesize;            pager.pagination('refresh', {                pagenumber: pagenum,                pagesize: pagesize            });            dg.datagrid("unselectall");            dg.datagrid('loaddata', data);        }    });    if (!data.originalrows) {        data.originalrows = (data.rows);    }    //从第几条数据开始显示    var start = (opts.pagenumber - 1) * parseint(opts.pagesize);    //显示到那条数据    var end = start + parseint(opts.pagesize);    data.rows = (data.originalrows.slice(start, end));    return data;}

真分页:

    js代码里初始化表格,和上面一样

 Controller中查询数据的方法:

    /// <summary>        /// 查询所有所有的用户        /// </summary>        /// <returns>序列化对象</returns>        public ActionResult QueryUser()        {            ManageUserBLL userBll = new ManageUserBLL();            //获得从前台传过来的页数和每页的数量            int pageSize = Request["rows"] == null ? 10 : int.Parse(Request["rows"]);            int pageIndex = Request["page"] == null ? 1 : int.Parse(Request["page"]);            ////初始设定总页数为0,进行页码总行数查询,查询出来的数据需要赋给total            int total = 0;            //定义用户的实体集合            List<t_user> listUser = new List<t_user>();            listUser = userBll.QueryUser(pageSize, pageIndex, out total);                         return Json(new            {                rows = listUser,                total = total,            });        }

D层查询:

        /// <summary>        /// 查询所有的用户        /// </summary>        /// <returns>用户泛型集合</returns>        public List<t_user> QueryUser(int pagesize, int pagenum,out int total)        {            string sqlSearch = "select * from t_user order by userId  limit @start,@number ";            MySqlParameter[] pars = new MySqlParameter[]            {                         new MySqlParameter("@number",pagesize*pagenum),                new MySqlParameter("@start",(pagenum-1)*pagesize),            };            DataTable dt = MySQLHelper.ExecuteDataTable(sqlSearch,pars);           List<t_user> list = MySQLHelper.ConvertToList<t_user>(dt);           string sql = "select count(*) from t_user ";           total = int.Parse(MySQLHelper.ExecuteScalar(sql).ToString());           return list;        }


 区别:

  真分页: 需要多少数据从数据库中取多少,会多次从库中取。

  假分页:一次性从库中取完,再按条件查询。

优缺点:

    假分页,如果数据量较多,在首次页面加载的时候会比较慢,严重影响用户体

验,Web开发和搜索引擎优化。


    真分页的效率无疑是最高的,它还有很多的优点:

       1.每次点击下一页,客户端访问服务器的时间基本一样,提高用户体验,更加的人性化。

       2.对于大数据量可以从容的面对。


    缺点:与后台的交互次数增多。
    

0 0
原创粉丝点击