最近在寫一個關于NET的框架,寫到后面果不其然的就遇到了分頁,自己看了很多關于分頁的并自己結合寫了一個,曬出來和大家分享一下,第一次寫博客望大家多多提意見啦。。。
cs文件分頁代碼:
1 Paging p = new Paging(3, sql語句); //每頁3條 2 ViewState["List"] = p.GetDataTable(); //查詢出要顯示的DataTable3 ViewState["page"] = p.GetPageing(this); //分頁顯示html
前臺調用:
1 <%=ViewState["page"]%>
最近剛發現的ViewState這個函數,只要后臺定義前臺就可以調用很方便。(這個是不是自己out了,現在才發現)
下面是關于Paging類:
1 public class Paging 2 { 3 PRivate string pagedNum; //定義分頁條,輸出到前臺 4 private int pageSize; // 定義每頁有多少條數據量. 5 private string url; //獲取當前頁 6 private int countNum; //總條數 7 private string SelSql; //查詢SQL語句 8 private DataSet ds; 9 10 public Paging(int pageSize, string SelSql) 11 { 12 this.pageSize = pageSize; 13 this.url = HttpContext.Current.Request.Url.LocalPath; 14 this.SelSql = SelSql; 15 GetPageDate(SelSql); 16 } 17 //定義樣式a標簽第一個樣式 18 private readonly string CSStagA = @"<a href='{0}?page={1}' >{2}</a>"; //{0}{1}{2}代表url和參數名,參數值,頁碼值 19 //定義樣式a標簽第二個樣式 20 //private readonly string csstagA1 = "<a style='font-size:13px;font-weight:bold;margin:0 4px 0 4px'>{0}</a>"; 21 private readonly string csstagA1 = "<span class='pc'>{0}</span>"; 22 23 24 public delegate int GetDelegate(); 25 26 27 /// <summary> 28 /// 生成分頁條 29 /// </summary> 30 /// <param name="pageIndex">當前頁</param> 31 /// <param name="del">獲得數據條數的方法</param> 32 /// <returns></returns> 33 public string GetPageing(Page p) 34 { 35 string index = p.Request.QueryString["page"]; 36 int i; 37 if (!string.IsNullOrEmpty(index) && int.TryParse(index, out i)) 38 { 39 pagedNum = GetPagegNum(i, GetPageCount(i, countNum)); 40 } 41 else 42 { 43 pagedNum = GetPagegNum(1, GetPageCount(1, countNum)); 44 } 45 46 return pagedNum; 47 } 48 49 private int GetPageCount(int pageIndex, int countPage) //獲得總頁數 50 { 51 int Count = 0; 52 Count = countPage; 53 double c = Count * 1.0 / pageSize; 54 return (int)Math.Ceiling(c); 55 } 56 57 58 private string GetPagegNum(int pageIndex, int pageCount) //類似 上一頁 1 ... 7 8 9 ⑩ 11 12 13 14 下一頁 ⑩是當前選中頁 59 { 60 StringBuilder sb = new StringBuilder(); 61 List<int> ns = new List<int>(); //用于接收當前頁范圍內的數字 62 string[] numList = new string[12]; //12個字符串數組,存放分頁條數據 63 numList[0] = ""; //“上一頁”位置 64 numList[11] = ""; //“下一頁”位置 65 if (pageIndex > 1) //判斷當前頁 66 { 67 numList[0] = string.Format(csstagA, url, (pageIndex - 1), "<上一頁"); 68 } 69 if (pageIndex < pageCount) 70 { 71 numList[11] = string.Format(csstagA, url, (pageIndex + 1), "下一頁>"); 72 } 73 if (pageIndex >= 10) //當前頁大于10頁的狀態 74 { 75 //主要的 76 numList[1] = string.Format(csstagA, url, 1, 1); 77 numList[2] = "..."; 78 //int index = 0; 79 if (pageIndex + 4 >= pageCount) //如果當前頁加4頁小于總頁數 80 { 81 for (int i = pageCount - 7; i < pageCount + 1; i++) 82 { 83 //index = i; 84 ns.Add(i); 85 } 86 for (int j = 0; j <= 7; j++) //遍歷ns頁碼值填充到分頁條 87 { 88 if (ns[j] == pageIndex) //判斷是否為當前頁碼,來使用不同css樣式 89 { 90 numList[j + 3] = string.Format(csstagA1, ns[j]); //因為字符串數組前3位分別為“上一頁”,“1”,“...”,所以從第四位填充7個 91 } 92 numList[j + 3] = string.Format(csstagA, url, ns[j], ns[j]); 93 } 94 } 95 for (int i = pageIndex - 3; i <= pageIndex + 4; i++) 96 { 97 //index = i; 98 ns.Add(i); 99 }100 for (int j = 0; j <= 7; j++)101 {102 if (ns[j] == pageIndex)103 {104 numList[j + 3] = string.Format(csstagA1, ns[j]);105 }106 else107 {108 numList[j + 3] = string.Format(csstagA, url, ns[j], ns[j]);109 }110 }111 }112 else //10頁以下的狀態 113 {114 if (pageCount >= 10) //頁數大于等于10 115 {116 for (int i = 1; i <= 10; i++)117 {118 if (i == pageIndex)119 {120 numList[i] = string.Format(csstagA1, i);121 }122 else123 {124 numList[i] = string.Format(csstagA, url, i, i);125 }126 }127 }128 else //頁數小于10 129 {130 for (int i = 1; i <= pageCount; i++)131 {132 if (i == pageIndex)133 {134 numList[i] = string.Format(csstagA1, i);135 }136 else137 {138 numList[i] = string.Format(csstagA, url, i, i);139 }140 }141 }142 }143 sb.Append("<div class='page'>");144 for (int i = 0; i < numList.Length; i++) //將字符串數組填入StringBulider中 145 {146 sb.Append(numList[i]);147 }148 149 sb.AppendFormat(" 共{0}/{1}條", pageIndex, pageCount);150 sb.Append("</div>");151 return sb.ToString(); //返回,并在前臺 <span id="pagedspan"><%=pagedNum %></span> 152 }153 154 /// <summary>155 /// 獲取分頁數據和總頁數156 /// </summary>157 /// <param name="pageSql"></param>158 public void GetPageDate(string pageSql)159 {160 int pageIndex = Req.QueryString("page").ToInt(1);161 162 StringBuilder strSql = new StringBuilder();163 strSql.Append(@"declare @startRow int164 declare @endRow int165 declare @pageSize int166 declare @pageIndex int167 set @pageSize=@pageSize2 168 set @pageIndex=@pageIndex2 169 set @startRow=(@pageIndex-1) * @pageSize+1 170 set @endRow=@pageSize*@pageIndex");171 strSql.Append(" select * from(");172 strSql.Append("select *,ROW_NUMBER() OVER (ORDER BY getdate()) pageID from(");173 strSql.Append(pageSql);174 strSql.Append(")tab_a");175 strSql.Append(")tab_b where pageID between @startRow and @endRow");176 177
新聞熱點
疑難解答