关于PagedDataSource分页的实现

使用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         //}

嗯。这就是分开写四个事件的代码。大家看着喜欢那个用那个就是。。。希望有牛哥介绍下写一个事件有没有不合适的地方。。不胜感激。。

最后需要说的是。这种分页方式由于将所有的数据取出置于内存中。所以呢,效率不高。在中小型项目还可以使用。大型项目就算了。。。当然。咱也没做过大型项目,。。。

 

转载于:https://www.cnblogs.com/js-net/archive/2013/05/15/aspnet-3.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值