使用DataList实现数据分页的技术
今天做网站的时候,用到了分页技术,我把使用方法记录下来,以便日后查阅以及帮助新手朋友们。
DataList控件可以按照列表的形式显示数据表中的多行记录,但是被显示的多行记录没有分页功能,使用起来不太方便。因此需要借助PagedDataSource类来实现分页,该类封装了数据控件的分页属性,其常用属性及说明如下表所示。
属 性 | 说 明 |
AllowPaging |
获取或设置是否启用分页 |
AllowCustomPaging | 获取或设置是否启用自定义分页 |
CurrentPageIndex | 获取或设置当前显示页的索引 |
DataSource |
获取或设置用于填充控件中项的源数据 |
PageSize |
获取或设置要在数据绑定控件的每页上显示的项数 |
PageCount |
获取显示数据绑定控件中各项所需的总页数 |
FirstIndexPage |
获取页中的第一个索引 |
IsFirstPage |
获取一个值,该值指示当前页是否是首页 |
IsLastPage |
获取一个值,该值指示当前页是否是最后一页 |
DataKeyField |
获取或设置由DataSource属性指定的数据源中的键字段 |
DataKeys |
获取存储在数据列表控件中的每个记录的键值 |
大致实现效果图如下:
具体代码如下:
前台(aspx)代码:
<div class="you_align"> <table style="width:450px" cellpadding="0" cellspacing="0" align="center" > <tr><td> </td></tr> <tr> <td style="width: 600px; text-align: align; font-size: 9pt; height: 15px;" > <asp:Label ID="labCP" runat="server" Text="当前第"></asp:Label> <asp:Label ID="labPage" runat="server" Text="1"></asp:Label> 页 <asp:Label ID="labTP" runat="server" Text="共"></asp:Label> <asp:Label ID="labBackPage" runat="server"></asp:Label> 页 <asp:LinkButton ID="lnkbtnOne" runat="server" Font-Underline="False" ForeColor="Red" OnClick="lnkbtnOne_Click">第一页</asp:LinkButton> <asp:LinkButton ID="lnkbtnUp" runat="server" Font-Underline="False" ForeColor="Red" OnClick="lnkbtnUp_Click">上一页</asp:LinkButton> <asp:LinkButton ID="lnkbtnNext" runat="server" Font-Underline="False" ForeColor="Red" OnClick="lnkbtnNext_Click">下一页</asp:LinkButton> <asp:LinkButton ID="lnkbtnBack" runat="server" Font-Underline="False" ForeColor="Red" OnClick="lnkbtnBack_Click">尾页</asp:LinkButton> </td> </tr> </table> </div>
后台aspx.cs代码如下:
using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; public partial class zwgk : System.Web.UI.Page { CommonClass CC = new CommonClass(); protected void Page_Load(object sender, EventArgs e) { bind(); //政务公开 ZWGK.DataSource = CC.GetDataSet("SELECT * FROM News WHERE Style = '政务公开' order by Time Desc", "News"); ZWGK.DataKeyField = "id"; ZWGK.DataBind(); } protected void bind() { //取得当前页的页码 int curpage = Convert.ToInt32(this.labPage.Text); //使用PagedDataSource类实现DataList控件的分页功能 PagedDataSource ps = new PagedDataSource(); //获取数据集 DataSet ds = CC.GetDataSet("select * from News where style='政务公开' order by Time Desc", "News"); ps.DataSource = ds.Tables["News"].DefaultView; //是否可以分页 ps.AllowPaging = true; //显示的数量 ps.PageSize = 15; //取得当前页的页码 ps.CurrentPageIndex = curpage - 1; this.lnkbtnUp.Enabled = true; this.lnkbtnNext.Enabled = true; this.lnkbtnBack.Enabled = true; this.lnkbtnOne.Enabled = true; if (curpage == 1) { //不显示第一页按钮 this.lnkbtnOne.Enabled = false; //不显示上一页按钮 this.lnkbtnUp.Enabled = false; } if (curpage == ps.PageCount) { //不显示下一页 this.lnkbtnNext.Enabled = false; //不显示最后一页 this.lnkbtnBack.Enabled = false; } //显示分页数量 this.labBackPage.Text = Convert.ToString(ps.PageCount); //绑定DataList控件 this.ZWGK.DataSource = ps; this.ZWGK.DataKeyField = "id"; this.ZWGK.DataBind(); } //第一页 protected void lnkbtnOne_Click(object sender, EventArgs e) { this.labPage.Text = "1"; this.bind(); } //上一页 protected void lnkbtnUp_Click(object sender, EventArgs e) { this.labPage.Text = Convert.ToString(Convert.ToInt32(this.labPage.Text) - 1); this.bind(); } //下一页 protected void lnkbtnNext_Click(object sender, EventArgs e) { this.labPage.Text = Convert.ToString(Convert.ToInt32(this.labPage.Text) + 1); this.bind(); } //最后一页 protected void lnkbtnBack_Click(object sender, EventArgs e) { this.labPage.Text = this.labBackPage.Text; this.bind(); } protected void ZWGK_ItemCommand(object source, DataListCommandEventArgs e) { int id = Convert.ToInt32(ZWGK.DataKeys[e.Item.ItemIndex].ToString()); Response.Write("<script language=javascript>location='show_News.aspx?id=" + id + "'</script>"); } }