.net分頁控件簡單實現

很久很久沒寫博客了。。。。。最近寫了一個.net的分頁控件,放到園子裏。。。你以爲好,就點個贊,很差呢,就告訴我爲啥吧。。。。數據庫

是使用Request.QueryString的。。。。c#

參數:數組

public int currentpageindex = 0;//當前頁數
public int pagesize = 16;//每頁顯示的條數
public int pagecount = 0;//頁數
public int rowscount = 320;//總條數
public string prevtext = "前一頁";
public string nexttext = "後一頁";
public string ellipsetext = "...";//分隔符
public int edgeentries = 2;//頁邊
public bool prevshowalways = true;//前一頁按鈕是否顯示
public bool nextshowalways = true;//後一頁按鈕是否顯示
public int displayentries = 6;//顯示幾個按鈕
public string url;
public string pagestr = "";

計算最大頁數這裏沒啥好說的,從數據庫讀出條數以後賦給rowscount便可。ide



//計算最大的頁數
public int NumPages()
{
     return Convert.ToInt32(Math.Ceiling((decimal)rowscount / pagesize));
}

主要問題就在於計算開始和結束按鈕這裏,這裏整好了,就至關於一半都沒問題了url

一開始我是使用的以下的代碼,可是有問題。。。。若是displayentries爲2n-1時,最後出來的是2n。spa

//根據當前頁數和顯示數目計算開始和結束的分頁按鈕
        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返回的是一樣一個數,因此就會形成按鈕個數上出現問題。.net

因此呢,我就區別了一下奇數和偶數code

//根據當前頁數和顯示數目計算開始和結束的分頁按鈕
        public int[] GetInterval()
        {
            int nehalf = Convert.ToInt32(Math.Ceiling((decimal)displayentries / 2));
            pagecount = NumPages();
            int upperlimit = pagecount - displayentries+1;
            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 };
        }

添加按鈕類blog

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;
        }

生成分頁控件類ip

 
  
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。。。。



MSP(Microsoft Student Partners)是微軟公司針對高校

大學生在全球範圍內所設立的項目。旨在鼓勵那些在校園裏積極倡導、推進創新實踐,

樂於積極幫助他人的優秀學生,給他們提供微軟最前沿的技術資源,以及更普遍的交流、展現自個人平臺。   

MSP項目面向全部熱愛技術、敢於創新、積極推進創新實踐、願意和他人分享本身所學的在校大學生,並不單單侷限於技術類背景的學生。

若是你喜歡的話,歡迎加入。地址

http://msdn.microsoft.com/zh-cn/jj889435.aspx
相關文章
相關標籤/搜索