项目过程中遇到一篇文章篇幅很长,下拉查看非常不便,
此方法实现长文章的手动分页,在后台添加内容过程中,我以“|”作为分页的标志,
1、webConfig中的设置。
<appSettings> <add key="PagerSplit" value="|"/> </appSettings>
当然你也可以设置其他字符作为分页标志。
2、页面上的代码。
<table width="95%" align="center" border="0" class="tablecol" > <tr bgcolor=""> <td align="left"><asp:Label ID="content" runat="server"></asp:Label></td> </tr> </table> <asp:label id="currentpage" runat="server" CssClass="gray">当前页</asp:label> <asp:label id="totalpage" runat="server" CssClass="gray"></asp:label> <asp:hyperlink id="lnkfist" runat="server" CssClass="gray">首页</asp:hyperlink>| <asp:hyperlink id="lnkprev" runat="server" CssClass="gray">前页</asp:hyperlink>| <asp:hyperlink id="lnknext" runat="server" CssClass="gray">下页</asp:hyperlink>| <asp:hyperlink id="lnklast" runat="server" CssClass="gray">尾页</asp:hyperlink>
3、后台代码。
首先,在后台定义一个私有类型的公共变量,在Page_Load方法的外面
private ContentPager pager;
Page_Load方法里面的代码
文章标题、发文时间、作者、来源之类的信息要单独绑定,不和内容信息一起,因为它们在翻页后是不变的。下面列出绑定代码:
1 DataSet ds = sadsdd.ExcuteToDataSet("查询语句"); 2 dlContent.DataSource = ds; 3 dlContent.DataBind(); 4 DataRow drow; 5 drow = ds.Tables["mytable"].Rows[0]; 6 string cont = drow["news_content"].ToString();//此部分可以把内容中的HTML代码转换一下,我也省略了 7 //文章分页,关键部分 8 pager = new ContentPager(); 9 pager.Lnknext = this.lnknext; 10 pager.Lnkprev = this.lnkprev; 11 pager.Lnklast = this.lnklast; 12 pager.Lnkfist = this.lnkfist; 13 pager.Pagenum = this.currentpage; 14 pager.Pagecount = this.totalpage; 15 pager.DisplayContent = this.content; 16 string query = "&id=" + Request.QueryString["id"].ToString(); 17 pager.datapager(cont, query);
其中的dlContent为文章的标题以及发文时间,作者之类的信息。
本分页代码中需要用到的类
1 public class ContentPager:System.Web.UI.Page 2 { 3 private System.Web.UI.WebControls.HyperLink lnknext; 4 private System.Web.UI.WebControls.HyperLink lnkprev; 5 private System.Web.UI.WebControls.HyperLink lnkfist; 6 private System.Web.UI.WebControls.HyperLink lnklast; 7 private System.Web.UI.WebControls.Label pagenum; 8 private System.Web.UI.WebControls.Label pagecount; 9 private System.Web.UI.WebControls.Label displaycontent; 10 public ContentPager() 11 { 12 // 13 // TODO: 在此处添加构造函数逻辑 14 // 15 } 16 public void datapager(string content, string query) 17 { 18 string PagerSplit = System.Configuration.ConfigurationManager.AppSettings["PagerSplit"];//从web.config中获取分页符,当然这里可以自己定义,为了方便还是放到配置文件或者数据库中。 19 string[] contentArray = StringSplit(content, PagerSplit);//这里是一个方法,摘自网上 20 int PageCount = contentArray.Length; 21 this.pagecount.Text = "共<b><font color='#FF0000'>" + PageCount.ToString() + "</font></b>页"; 22 int CurPage; 23 //确定当前页数 24 if (System.Web.HttpContext.Current.Request.Params["Page"] != null) 25 { 26 CurPage = Convert.ToInt32(System.Web.HttpContext.Current.Request.Params["Page"]); 27 } 28 else 29 { 30 CurPage = 1; 31 } 32 if (CurPage < 1) CurPage = 1; 33 if (Convert.ToInt32(System.Web.HttpContext.Current.Request.Params["Page"]) > PageCount) 34 { 35 CurPage = PageCount; 36 } 37 //显示当前页数 38 this.pagenum.Text = "第<b><font color='#FF0000'>" + CurPage.ToString() + "</font></b>页"; 39 //下一页 40 if (CurPage != PageCount) 41 { 42 lnknext.NavigateUrl = System.Web.HttpContext.Current.Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage + 1) + query; 43 } 44 //上一页 45 if (CurPage > 1) 46 { 47 lnkprev.NavigateUrl = System.Web.HttpContext.Current.Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage - 1) + query; 48 } 49 //第一页 50 if (CurPage != 1) 51 { 52 lnkfist.NavigateUrl = System.Web.HttpContext.Current.Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(1) + query; 53 } 54 //最后一页 55 if (CurPage != PageCount) 56 { 57 lnklast.NavigateUrl = System.Web.HttpContext.Current.Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(PageCount) + query; 58 } 59 displaycontent.Text = contentArray[CurPage - 1].ToString(); 60 } 61 62 #region System.Web.UI.WebControls.HyperLink DisplayContent 63 public System.Web.UI.WebControls.Label DisplayContent 64 { 65 get 66 { 67 return this.DisplayContent; 68 } 69 set 70 { 71 this.displaycontent = value; 72 } 73 } 74 #endregion 75 #region System.Web.UI.WebControls.HyperLink Lnkprev 76 public System.Web.UI.WebControls.HyperLink Lnkprev 77 { 78 get 79 { 80 return this.lnkprev; 81 } 82 set 83 { 84 this.lnkprev = value; 85 } 86 } 87 #endregion 88 #region System.Web.UI.WebControls.HyperLink Lnknext 89 public System.Web.UI.WebControls.HyperLink Lnknext 90 { 91 get 92 { 93 return this.lnknext; 94 } 95 set 96 { 97 this.lnknext = value; 98 } 99 } 100 #endregion 101 #region System.Web.UI.WebControls.HyperLink Lnkfist 102 public System.Web.UI.WebControls.HyperLink Lnkfist 103 { 104 get 105 { 106 return this.lnkfist; 107 } 108 set 109 { 110 this.lnkfist = value; 111 } 112 } 113 #endregion 114 #region System.Web.UI.WebControls.HyperLink Lnklast 115 public System.Web.UI.WebControls.HyperLink Lnklast 116 { 117 get 118 { 119 return this.lnklast; 120 } 121 set 122 { 123 this.lnklast = value; 124 } 125 } 126 #endregion 127 #region System.Web.UI.WebControls.Label Pagenum 128 public System.Web.UI.WebControls.Label Pagenum 129 { 130 get 131 { 132 return this.pagenum; 133 } 134 set 135 { 136 this.pagenum = value; 137 } 138 } 139 #endregion 140 #region System.Web.UI.WebControls.Label Pagecount 141 public System.Web.UI.WebControls.Label Pagecount 142 { 143 get 144 { 145 return this.pagecount; 146 } 147 set 148 { 149 this.pagecount = value; 150 } 151 } 152 #endregion 153 #region 将字符串分割成数组 154 /// <summary> 155 /// 将字符串分割成数组 156 /// </summary> 157 /// <param name="strSource"></param> 158 /// <param name="strSplit"></param> 159 /// <returns></returns> 160 public string[] StringSplit(string strSource, string strSplit) 161 { 162 string[] strtmp = new string[1]; 163 int index = strSource.IndexOf(strSplit, 0); 164 if (index < 0) 165 { 166 strtmp[0] = strSource; 167 return strtmp; 168 } 169 else 170 { 171 strtmp[0] = strSource.Substring(0, index); 172 return StringSplit(strSource.Substring(index + strSplit.Length), strSplit, strtmp); 173 } 174 } 175 #endregion 176 #region 采用递归将字符串分割成数组 177 /// <summary> 178 /// 采用递归将字符串分割成数组 179 /// </summary> 180 /// <param name="strSource"></param> 181 /// <param name="strSplit"></param> 182 /// <param name="attachArray"></param> 183 /// <returns></returns> 184 private string[] StringSplit(string strSource, string strSplit, string[] attachArray) 185 { 186 string[] strtmp = new string[attachArray.Length + 1]; 187 attachArray.CopyTo(strtmp, 0); 188 int index = strSource.IndexOf(strSplit, 0); 189 if (index < 0) 190 { 191 strtmp[attachArray.Length] = strSource; 192 return strtmp; 193 } 194 else 195 { 196 strtmp[attachArray.Length] = strSource.Substring(0, index); 197 return StringSplit(strSource.Substring(index + strSplit.Length), strSplit, strtmp); 198 } 199 } 200 #endregion 201 }