真假分页

引言:

    最近的做的积分系统中加载所有的用户时需要进行分页显示,以前在牛腩的时候接触过,在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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 28
    评论
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值