使用PagedDataSource控件进行分页的实现。具体实现代码所示,其中需讲解的东西。在代码注释中,可以参考注释理解。
先上前台代码。前台是一个repeater控件来显示数据,同时使用四个linkbutton控件,显示四个超链接,以跳转到首尾或上下页码。看官前请看:
1 <body> 2 <form id="form1" runat="server"> 3 <div style="margin: 0 auto; border: 1px solid red; height: 680px; width: 500px"> 4 <table border="0" cellpadding="0" cellspacing="0"> 5 <asp:Repeater runat="server" ID="repList"> 6 <ItemTemplate> 7 <tr> 8 <td> 9 <%#Eval("ID") %> 10 </td> 11 <td> 12 <%#Eval("LastName")%> 13 </td> 14 <td> 15 <%#Eval("Age")%> 16 </td> 17 <td> 18 <%#Eval("Sex")%> 19 </td> 20 </tr> 21 </ItemTemplate> 22 </asp:Repeater> 23 </table> 24 <input type="text" runat="server" disabled="disabled" id="CurPage" size="2" /> 25 <input type="text" runat="server" disabled="disabled" id="TotlePage" size="2" /> 26 <asp:LinkButton ID="lbtn1" Text="首页" runat="server" OnClick="LinkButton_Click" /> 27 <asp:LinkButton ID="lbtn2" Text="上一页" runat="server" OnClick="LinkButton_Click" /> 28 <asp:LinkButton ID="lbtn3" Text="下一页" runat="server" OnClick="LinkButton_Click" /> 29 <asp:LinkButton ID="lbtn4" Text="尾页" runat="server" OnClick="LinkButton_Click" /> 30 </div> 31 </form> 32 </body>
上面用了两个input控件来显示当前页和总页数,然后下面的四个linkbutton控件绑定到同一个事件上。后台代码如下。
1 public partial class ListPage : System.Web.UI.Page 2 { 3 PagedDataSource pds = new PagedDataSource(); 4 protected void Page_Load(object sender, EventArgs e) 5 { 6 if (!Page.IsPostBack) 7 { 8 CurPage.Value = "1"; 9 Data_Binding(); 10 } 11 } 12 13 /// <summary> 14 /// 数据绑定 15 /// </summary> 16 private void Data_Binding() 17 { 18 pds.AllowPaging = true; // 允许分页 19 pds.DataSource = DbHelper.GetList().DefaultView; // 设置数据源 20 pds.PageSize = 20; // 设置页容量 21 pds.CurrentPageIndex = Convert.ToInt32(CurPage.Value) - 1; //设置当前要现实的页码 22 TotlePage.Value = pds.PageCount.ToString(); // 获得总页数 23 24 repList.DataSource = pds; // 将PagedDataSource 数据绑定到要显示控件上,这里是repeater控件 25 repList.DataBind(); 26 Paging(); // 设置前台,首页,上一页,下一页,尾页的连接是否可用 27 } 28 29 30 protected void LinkButton_Click(object sender, EventArgs e) 31 { 32 string id = (sender as LinkButton).ID; // 获取触发控件的ID 33 string index = "1"; 34 switch (id) 35 { 36 case "lbtn1": index = "1"; break; // 如果是跳转到首页,则设为1 37 case "lbtn2": index = (Convert.ToInt32(CurPage.Value) - 1).ToString(); break; // 跳转的上一页 38 case "lbtn3": index = (Convert.ToInt32(CurPage.Value) + 1).ToString(); break; // 跳转到下一页 39 case "lbtn4": index = TotlePage.Value; ; break; // t跳转到尾页 40 } 41 CurPage.Value = index; // 设置当前页 42 Data_Binding(); 43 } 44 45 private void Paging() 46 { 47 // 如果当前是首页,则设置控件的enabled属性为false 48 lbtn1.Enabled = lbtn2.Enabled = !pds.IsFirstPage; 49 // 如果当前是尾页,则设置控件的enabled属性为false 50 lbtn3.Enabled = lbtn4.Enabled = !pds.IsLastPage; 51 } 52 }
代码中需要讲解的地方都添加了详细的注释。。这里的页码跳转四个linkbutton同事绑定到了一个linkbutton_click事件上了。当然他们的事件也可以分开写。不过我个人喜欢这样子写。当然。咱也是小虾米。这样写有没有什么坏处。。。。我也不知道。。。分开写事件的代码则如下所示。
1 //protected void lbtn1_Click(object sender, EventArgs e) 2 //{ 3 // CurPage.Value = "1"; 4 // Data_Binding(); 5 //} 6 //protected void lbtn2_Click(object sender, EventArgs e) 7 //{ 8 // CurPage.Value = (Convert.ToInt32(CurPage.Value) - 1).ToString(); 9 // Data_Binding(); 10 //} 11 //protected void lbtn3_Click(object sender, EventArgs e) 12 //{ 13 // CurPage.Value = (Convert.ToInt32(CurPage.Value) + 1).ToString(); 14 // Data_Binding(); 15 //} 16 //protected void lbtn4_Click(object sender, EventArgs e) 17 //{ 18 // CurPage.Value = TotlePage.Value; 19 // Data_Binding(); 20 //}
嗯。这就是分开写四个事件的代码。大家看着喜欢那个用那个就是。。。希望有牛哥介绍下写一个事件有没有不合适的地方。。不胜感激。。
最后需要说的是。这种分页方式由于将所有的数据取出置于内存中。所以呢,效率不高。在中小型项目还可以使用。大型项目就算了。。。当然。咱也没做过大型项目,。。。