• .net分页控件简单实现


    .net分页控件简单实现

    好久好久没写博客了。。。。。最近写了一个.net的分页控件,放到园子里。。。你觉得好,就点个赞,不好呢,就告诉我为啥吧。。。。

    是使用Request.QueryString的。。。。

    参数:

    复制代码
            public int currentPageIndex = 0;//当前页数
            public int pagesize = 16;//每页显示的条数
    
            public int pagecount = 0;//页数
            public int rowscount = 0;//总条数
            public string prevtext = "前一页";
            public string nexttext = "后一页";
            public string ellipsetext = "...";//分隔符
            public int edgeentries = 2;//页边
            public bool prevshowalways = true;//前一页按钮是否显示
            public bool nextshowalways = true;//后一页按钮是否显示
            public int displayentries = 5;//显示几个按钮
            public string url;
            public string pagestr = "";
    复制代码

    用到的类

    计算最大页数这里没啥好说的,从数据库读出条数之后赋给rowscount即可。

    复制代码
    //计算最大的页数
            public int NumPages()
            {
                return Convert.ToInt32(Math.Ceiling((decimal)rowscount / pagesize));
            }

    复制代码

    主要问题就在于计算开始和结束按钮这里,这里整好了,就相当于一半都没问题了

    一开始我是使用的如下的代码,但是有问题。。。。如果displayentries为2n-1时,最后出来的是2n。

    复制代码
    //根据当前页数和显示数目计算开始和结束的分页按钮
            public int[] GetInterval()
            {
                int nehalf = Convert.ToInt32(Math.Ceiling((decimal)displayentries / 2));
                pagecount = NumPages();
                int upperlimit = pagecount - displayentries;//最大就是upperlimit,再大的话按钮的个数就不能保证了。
                int start = currentpageindex > nehalf ? Math.Max(Math.Min(currentpageindex - nehalf, upperlimit), 1) : 1;
                int end = currentpageindex > nehalf ? Math.Min(currentpageindex + nehalf - 1, pagecount) : Math.Min(displayentries, pagecount);
                return new int[] { start, end };
            }
    复制代码

    主要的原因就在于Math.Ceiling返回的是整数,而2n-1和2n返回的是同样一个数,所以就会造成按钮个数上出现问题。

    所以呢,我就区别了一下奇数和偶数

    复制代码
    //根据当前页数和显示数目计算开始和结束的分页按钮
            public int[] GetInterval()
            {
                int nehalf = Convert.ToInt32(Math.Ceiling((decimal)displayentries / 2));
                pagecount = NumPages();
                int upperlimit = pagecount - displayentries;
                int start,end;
                if (displayentries % 2 == 0)
                {
                   start = currentpageindex > nehalf ? Math.Max(Math.Min(currentpageindex - nehalf, upperlimit), 1) : 1;
                }
                else 
                {
                    start = currentpageindex > nehalf ? Math.Max(Math.Min(currentpageindex - nehalf+1, upperlimit), 1) : 1;
                }
                end = currentpageindex > nehalf ? Math.Min(currentpageindex + nehalf - 1, pagecount) : Math.Min(displayentries, pagecount);
                return new int[] { start, end };
            }
    复制代码

    添加按钮类

    复制代码
     public string AppendItem(int pageid, string text)
            {
                string lnk;
                int id = pageid < 1 ? 1 : (pageid < pagecount ? pageid : pagecount);
                if (id == currentpageindex)
                {
                    lnk = "<span class='current'>" + text + "</span>";
                }
                else
                {
                    lnk = "<a href=?" + url + "&pageid=" + id + ">" + text + "</a>";
                }
                return lnk;
            }
    复制代码

    生成分页控件类

    复制代码
    public string DrawLink()
            {
                //首先得到开始和结束的数组
                int[] interval = GetInterval();
    
    
                //生成前一页链接
                if (prevtext != "" && currentpageindex > 1 && prevshowalways)
                {
                    pagestr = AppendItem(currentpageindex - 1, prevtext);
                }
                //看是否有边界页,是否需要分界符
                if (interval[0] > 1 && edgeentries > 0)
                {
                    //检查边界和开始谁小,画按钮
                    int end = Math.Min(edgeentries, interval[0]);
                    //生成边界页
                    if (edgeentries == interval[0]) //注意interval[0]和edgeentries相等的时候,会出现重复
                    {
                        for (int i = 1; i < end; i++)
                        {
                            pagestr = pagestr + AppendItem(i, i.ToString());
                        }
                    }
                    else
                    {
                        for (int i = 1; i <= end; i++)//从1开始,因此i要小于等于end,这样才会把end这个按钮画上
                        {
                            pagestr = pagestr + AppendItem(i, i.ToString());
                        }
                    }
                    //生成分界符
                    if (edgeentries + 1 < interval[0] && ellipsetext != "")
                    {
                        pagestr = pagestr + "<span>" + ellipsetext + "</span>";
                    }
                }
    
    
                for (int i = interval[0]; i <= interval[1]; i++)
                {
                    pagestr = pagestr + AppendItem(i, i.ToString());
                }
    
                if (interval[1] < pagecount && edgeentries > 0)//结尾
                {
                    if (pagecount - edgeentries > interval[1] && ellipsetext != "")
                    {
                        pagestr = pagestr + "<span>" + ellipsetext + "</span>";
                    }
                    int begin = Math.Max(pagecount - edgeentries + 1, interval[1]);
                    if (pagecount - edgeentries + 1 == interval[1])
                    {
                        for (int i = begin+1; i <= pagecount; i++)
                        {
                            pagestr = pagestr + AppendItem(i, i.ToString());
                        }
                    }
                    else 
                    {
                        for (int i = begin; i <= pagecount; i++)
                        {
                            pagestr = pagestr + AppendItem(i, i.ToString());
                        }
                    }
    
                }
                //生成后一页链接
                if (nexttext != "" && currentpageindex < pagecount && nextshowalways)
                {
                    pagestr = pagestr + AppendItem(currentpageindex + 1, nexttext);
                }
                return pagestr;
            }
    复制代码

    这样,这个简单的.net分页控件就实现了。如果你有更好的方法,欢迎和我交流。。hiahia。。。。

     文件

    Paginate.zip

    MSP(Microsoft Student Partners)是微软公司针对高校

    大学生在全球范围内所设立的项目。旨在鼓励那些在校园里积极倡导、推动创新实践,

    乐于积极帮助他人的优秀学生,给他们提供微软最前沿的技术资源,以及更广泛的交流、展示自我的平台。   

    MSP项目面向所有热爱技术、勇于创新、积极推动创新实践、愿意和他人分享自己所学的在校大学生,并不仅仅局限于技术类背景的学生。

    如果你喜欢的话,欢迎加入。地址

    http://msdn.microsoft.com/zh-cn/jj889435.aspx

     
     
    分类: .net
    标签: C#分页控件.net
  • 相关阅读:
    如何手动同步 Chrome 浏览器的数据
    如何释放 Windows 10 系统的 C 盘空间
    Foxmail
    常用 Git 命令
    常用的 .gitignore 模板
    MySQL InnoDB Engine--数据页存储和INSERT操作
    MySQL InnoDB Engine--数据页存储和ALTER TABLE操作
    MySQL InnoDB Engine--数据页存储
    MySQL Index--BAK和MRR演示
    MySQL Execute Plan--Index Merge特性
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3179917.html
Copyright © 2020-2023  润新知