分页查询表格逻辑 及源码

前台写数据展现时 有时需要用到分页   以下是自己写的分页源码

  HTML页面的 格式   给DIv加一个ID

在给分页写个框架

  <div class="row" id="imglist">

                </div>
                 <%--分页控件--%>
                            <div class="row">
                                <div class="col-md-12 text-right">
                                    <nav aria-label="Page navigation">
                                        <ul class="pagination  pagination-lg" id="fenye" >
                                           
                                            
                                            
                                        </ul>
                                    </nav>
                                </div>
                            </div>

然后添加JQ引用

在写一个Jq  编写 写入正则方法  加入引用

//获取Url参数
function getUrlParam(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
    var r = window.location.search.substr(1).match(reg);
    if (r != null)
        return unescape(r[2]);
    return null;
}

然后取值并使用Ajax方法传入后台

<%--展现图片列表及分页--%>
<script type="text/javascript">
    //记录每页有多少条数据  默认4条
    var count = 4;
    //记录产品的类型
    var Type = 2;
    //页面加载后运行此方法
    $(function () {

        //请求数据
        //记录当前第几页   默认第一页
        var page = 1;
        console.log(getUrlParam("Type"));
        if (getUrlParam("Type") != null) {

            type = getUrlParam("Type");
        }
        GetImgList(page)
    });
    //更改类型方法
    function GengGai(leixing) {
        Type = leixing;
        var page = 1;
        GetImgList(page)
    }
    //前台后台请求数据的方法   传递当前第几页  一页多少条
    function GetImgList(page) {

        $.ajax({
            type: "POST",
            url: "../News/NewsList.ashx?action=GetNewsByType",
            data: { page: page, count: count, Type: Type },
            contentType: "application/x-www-form-urlencoded",
            dataType: "json",
            async: false,
            cache: false,
            success: function (data) {
                
                //总条数
                var total = data.total;
                //查询到的图片列表数据
                var imgList = data.rows;
                var imgHtml = "";
                //遍历查询到的图片列表数据并且拼接成展现出来的HTML
                for (var i = 0; i < imgList.length; i++) {
                    imgHtml = imgHtml + '<div class="col-md-6" ><div style="height: 120px; margin-top: 10px;"><div class="w-590-h-120"><div class="row"><div class="red"><a href="Details.aspx?FId=' + imgList[i].FId + '"><div class="col-md-3" style="margin-top: 10px; margin-left: 10px;"><img style="width: 115px; height: 100px;" src="' + imgList[i].FImg + '" /></div><div class="col-md-6" style="height: 100px; margin-top: 10px;"><p>' + imgList[i].FAbout + '</p></div><div class="col-md-3"><div class="w-100-h-100-t-10"><p style="font-size: 17px; line-height: 100px; text-align: center">' + changeDateFormat(imgList[i].FTime) + '</p></div></div></a></div></div></div></div></div>'
                }
                //清除原有数据
                $("#imglist").html("");
                //渲染新的图片列表数据
                $("#imglist").html(imgHtml);

                //计算分页  总条数 除 每页的条数
                var fenye = Math.ceil(total / count);
                //分页html
                var fenyeHtml = "";
                //判断是否要头
                if (page - 2 > 1) {
                    if (fenye > 5) {
                        //要头
                        fenyeHtml = '<li><a href ="javascript:void(0);" onclick="GetImgList(1)" aria - label="Previous" ><span aria-hidden="true">&laquo;</span></a ></li >';
                    }



                    ///处理的 678
                    if (fenye - page <= 2) {
                        //不要尾
                        //page=4 fenye=5
                        //向前加4-(fenye-page)
                        for (var i = 4 - (fenye - page); i > 0; i--) {
                            fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);" onclick="GetImgList(' + (page - i) + ')">' + (page - i) + '</a></li>';
                        }
                        fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);"  style="background-color:red" onclick="GetImgList(' + page + ')">' + page + '</a></li>';
                        //加几=fenye-page
                        for (var i = 1; i <= fenye - page; i++) {
                            fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);" onclick="GetImgList(' + (page + i) + ')">' + (page + i) + '</a></li>';
                        }
                    }
                    else {
                        debugger;
                        //正常+2
                        fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);"  style="background-color:red"  onclick="GetImgList(' + page + ')">' + page + '</a></li>';
                        fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);"  onclick="GetImgList(' + (page + 1) + ')">' + (page + 1) + '</a></li>';
                        fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);" onclick="GetImgList(' + (page + 2) + ')">' + (page + 2) + '</a></li>';

                        //要尾
                        fenyeHtml = fenyeHtml + '<li>< a href = "javascript:void(0);" onclick="GetImgList(' + fenye + ')" aria - label="Next" ><span aria-hidden="true">&raquo;</span></a ></li >';
                    }
                }
                else {
                    //1 2 3
                    //不要头
                    //如果小于3
                    if (page < 3) {
                        //12
                        //减几=page-1
                        if (page == 2) {
                            fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);"  onclick="GetImgList(1)">1</a></li>';
                        }
                        //正常值
                        fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);"  style="background-color:red"  onclick="GetImgList(' + page + ')">' + page + '</a></li>';
                    }
                    else {
                        //3
                        fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);"  onclick="GetImgList(1)">1</a></li>';
                        fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);"  onclick="GetImgList(2)">2</a></li>';
                        fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);"  style="background-color:red" onclick="GetImgList(3)">3</a></li>';
                    }


                    //page+3 是不是大于分页数
                    if (page + (5 - page) > fenye) {
                        //不能加那么多 加几= fenye-page
                        for (var i = 1; i <= fenye - page; i++) {
                            fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);" onclick="GetImgList(' + (page + i) + ')" >' + (page + i) + '</a></li>';
                        }
                    }
                    else {
                        //正常加 5-page
                        for (var i = 1; i <= 5 - page; i++) {
                            fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);" onclick="GetImgList(' + (page + i) + ')">' + (page + i) + '</a></li>';
                        }
                    }

                    if (fenye > 5) {
                        fenyeHtml = fenyeHtml + '<li>< a href = "javascript:void(0);" onclick="GetImgList(' + fenye + ')" aria - label="Next" ><span aria-hidden="true">&raquo;</span></a ></li >';
                    }

                }

                //清除原分页
                $("#fenye").html("");
                //载入新分页 
                $("#fenye").html(fenyeHtml);
            }
        });
    }



</script>

记住  里面有一个For循环 是循环前台展现的框架代码  ‘+ imgList[i].FId + ’属于展现图片或其他的代码

然后是后台的代码  

也就是aspx.cs    或ashx里的代码

/// <summary>
        /// 根据Type分页查询列表数据
        /// </summary>
        /// <param name="context"></param>
        public void GetNewsByType(HttpContext context)
        {
            //声明一个动态类   初始化动态类
            dynamic ObjJson = new ExpandoObject();
            //取值  每页几条数据
            int count = Convert.ToInt32(context.Request["count"]);
            //取值 当前页数
            int page = Convert.ToInt32(context.Request["page"]);
            //取值   查询的类型
            int Type = Convert.ToInt32(context.Request["Type"]);
            //最小条数
            int offset = (page - 1) * count;
            //生命一个新的BLL方法
            Maticsoft.BLL.T_News newsBll = new Maticsoft.BLL.T_News();
            //总条数从0开始
            int total = 0;
            ObjJson.rows = newsBll.GetNewsByType(count, offset, Type, out total);
            ObjJson.total = total;
            context.Response.Write(JsonConvert.SerializeObject(ObjJson));
            context.Response.End();
        }

然后是BLL源码

 /// <summary>
        /// 前台根据Type分页查询T_News数据
        /// </summary>
        /// <param name="limit">每页的条数</param>
        /// <param name="offset">当前第几页</param>
        /// <param name="Type">类型</param>
        /// <param name="total">总条数</param>
        /// <returns></returns>
        public DataTable GetNewsByType(int limit, int offset, int Type, out int total)
        {
            return dal.GetNewsByType(limit, offset, Type, out total);
        }

最后是DAL源码   一定要写正确SQL语句

/// <summary>
        /// 前台根据Type分页查询T_News数据
        /// </summary>
        /// <param name="limit">每页的条数</param>
        /// <param name="offset">当前第几页</param>
        /// <param name="Type">类型</param>
        /// <param name="total">总条数</param>
        /// <returns></returns>
        public DataTable GetNewsByType(int limit, int offset, int Type, out int total)
        {
            string sql = "select top (@limit) * from (select row_number() over(order by FId desc) as rownumber,*from T_News where FType = @FType)as temp_row where rownumber> @offset ";
            string totalsql = "select COUNT(1) from T_News where FType = @Ftype";
            total = Convert.ToInt32(SqlHelper.ExecuteScalar(SqlHelper.connStr, totalsql, new SqlParameter[]
            {
                new SqlParameter("@FType",Type)
            }));
            SqlParameter[] para = new SqlParameter[]
            {
                new SqlParameter("@limit",SqlDbType.Int),
                new SqlParameter("@offset",SqlDbType.Int),
                new SqlParameter("@FType",Type)
            };
            para[0].Value = limit;
            para[1].Value = offset;
            para[2].Value = Type;
            return SqlHelper.ExecuteDataTable(SqlHelper.connStr, sql, para);


        }

格式写对   传的类型数据不能是中文   中文容易乱码  

下面是效果图

 新手  写的不好 多多谅解 

猜你喜欢

转载自www.cnblogs.com/yutang-wangweisong/p/11988755.html