Asp.net提供了三个功能强大的列表控件:GridView、DataList和Repeater控件,相对GridView,DataList和Repeater控件具有更高的样式自定义性,很多时候我们喜欢使用DataList或Repeater控件来显示数据,但是Repeater和DataList没有分页功能,有时很不方便。
PagedDataSource类封装了GridView控件的属性,从而使GridView控件可以执行分页,它就是一个数据的容器,我们先把数据从数据库中读取出来放在这个容器中,然后设置容器的属性取出当前要显示的页上的部分数据,然后将此部分数据再绑定到页面上的显示控件上。
下面实例是用PagedDataSource类实现DataList控件的数据分页
页面后台代码
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
1 using System;
2 using System.Data;
3 using System.Configuration;
4 using System.Collections;
5 using System.Web;
6 using System.Web.Security;
7 using System.Web.UI;
8 using System.Web.UI.WebControls;
9 using System.Web.UI.WebControls.WebParts;
10 using System.Web.UI.HtmlControls;
11 using System.Data;
12 using System.Data.SqlClient;
13 public partial class Demo : System.Web.UI.Page
14 {
15 protected SqlConnection conn; //添加数据库的操作对象
16 protected SqlDataAdapter da;
17 protected DataSet ds;
18 protected SqlCommand comm;
19 protected void Page_Load(object sender, EventArgs e)
20 {
21 getArticle();
22 }
23 private void getArticle() //取得Article数据
24 {
25 conn = new SqlConnection("server=127.0.0.1;database=ObtainEmployment;user id=sa;password=;");//取连接字符串,建立连接
26 da = new SqlDataAdapter();
27 da.SelectCommand = new SqlCommand("SELECT top 50 * FROM db_Article where checkup='1' ORDER BY intime DESC ", conn);
28 ds = new DataSet();
29 try
30 {
31 conn.Open();
32 da.Fill(ds, "Article");
33 conn.Close();
34 }
35 catch (SqlException e1)
36 {
37 Response.Write(e1.ToString());
38 }
39
40 int cup = Convert.ToInt32(this.lb_CurrentPage.Text); //当前页数,初始化为地1页
41 PagedDataSource ps = new PagedDataSource();
42 ps.DataSource = ds.Tables["Article"].DefaultView;
43 ps.AllowPaging = true;
44 ps.PageSize = 6; //每页显示的数据的行数
45 ps.CurrentPageIndex = cup - 1;
46 lb_count.Text = ps.DataSourceCount.ToString(); //获取记录总数
47 lb_page.Text = ps.PageCount.ToString(); //获取总页数
48 if (!IsPostBack)
49 {
50 for (int i = 1; i < ps.PageCount + 1; i++)
51 {
52 this.DropDownList1.Items.Add(i.ToString());
53
54 }
55 LinkUp.Enabled = true;
56 LinkDown.Enabled = true;
57 }
58 try
59 {
60 DropDownList1.SelectedItem.Text = cup.ToString();
61 DataList1.DataSource = ps;
62 DataList1.DataBind();
63 }
64 catch (Exception ex)
65 {
66 throw ex;
67 }
68
69 }
70
71 protected void LinkDown_Click(object sender, EventArgs e) //下一页按钮代码
72 {
73 try
74 {
75 lb_CurrentPage.Text = Convert.ToString(Convert.ToInt32(lb_CurrentPage.Text) + 1);
76 DropDownList1.SelectedValue = lb_CurrentPage.Text;
77 getArticle();
78 }
79 catch (Exception ex)
80 {
81 Response.Write("<script language=javascript>" + "alert(\"已经是最后一页\")" + "</script>");
82 lb_CurrentPage.Text = "1";
83 getArticle();
84 }
85
86 }
87 protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) //跳转到指定页代码
88 {
89 int page =Convert.ToInt16((DropDownList1.SelectedItem.Value));
90 lb_CurrentPage.Text = page.ToString();
91 getArticle();
92 }
93 protected void LinkUp_Click(object sender, EventArgs e) //上一页按钮代码
94 {
95 try
96 {
97 if (Convert.ToInt16(lb_CurrentPage.Text) > 1)
98 {
99 lb_CurrentPage.Text = Convert.ToString(Convert.ToInt32(lb_CurrentPage.Text) - 1);
100 DropDownList1.SelectedValue = lb_CurrentPage.Text;
101 getArticle();
102 }
103 else
104 {
105 Response.Write("<script language=javascript>" + "alert(\"已经是第一页\")" + "</script>");
106 }
107 }
108 catch (Exception ex)
109 {
110
111 Response.Write("<script language=javascript>" + "alert(\"已经是第一页\")" + "</script>");
112
113 }
114
115 }
116
117
118 protected void LinkFirst_Click(object sender, EventArgs e) //跳到第一页代码
119 {
120 if (lb_CurrentPage.Text != "1")
121 lb_CurrentPage.Text = "1";
122 else
123 {
124 Response.Write("<script language=javascript>" + "alert(\"已经是第一页\")" + "</script>");
125 }
126 getArticle();
127 }
128 protected void LinkLast_Click(object sender, EventArgs e) //跳到最后一页代码
129 {
130 if (lb_CurrentPage.Text.ToString() !=lb_page.Text.ToString())
131 lb_CurrentPage.Text = lb_page.Text.ToString();
132 else
133 {
134 Response.Write("<script language=javascript>" + "alert(\"已经是最后一页\")" + "</script>");
135 }
136 getArticle();
137 }
138 }
139
140
页面前台代码
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Demo.aspx.cs" Inherits="Demo" %>
2
3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4
5 <html xmlns="http://www.w3.org/1999/xhtml" >
6 <head runat="server">
7 <title>无标题页</title>
8 </head>
9 <body>
10 <form id="form1" runat="server">
11 <div>
12 <asp:DataList ID="DataList1" runat="server">
13 <ItemTemplate>
14 <asp:Label ID="lbNwes" runat="server" Text='<%#Eval("title")%>'></asp:Label>
15
16 <asp:Label ID="lbTime" runat="server" Text='<%#Eval("intime")%>'></asp:Label>
17 </ItemTemplate>
18 </asp:DataList></div>
19 <br />
20 共<asp:Label ID="lb_count" runat="server" Text="Label"></asp:Label>条记录
21 共<asp:Label ID="lb_page" runat="server" Text="Label"></asp:Label>页
22 当前第<asp:Label ID="lb_CurrentPage" runat="server" Text="1"></asp:Label>页
23
24 <asp:LinkButton ID="LinkFirst" runat="server" OnClick="LinkFirst_Click">第一页</asp:LinkButton>
25
26 <asp:LinkButton ID="LinkUp" runat="server" OnClick="LinkUp_Click">上一页</asp:LinkButton>
27 <asp:LinkButton ID="LinkDown" runat="server" OnClick="LinkDown_Click">下一页</asp:LinkButton>
28 <asp:LinkButton ID="LinkLast" runat="server" OnClick="LinkLast_Click">最后一页</asp:LinkButton>
29 转到第<asp:DropDownList ID="DropDownList1" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="True">
30 </asp:DropDownList>页
31 </form>
32 </body>
33 </html>
34
35