在.Net2.0 中 , VS2005 自带的Repeater和DataList控件提供了一个快速、灵活的表现数据的方式,但是,它们没有内建的分页功能;DataGrid控件提供了内建的分页功能,但它的结构比较复杂。下面就用PagedDataSource类实现Repeater和DataList的分页。 PagedDataSource封装了DataGrid的分页属性,我们可以象DataGrid那样进行分页。
演示地址
DataGridPaging.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="DataGridPaging.aspx.cs" Inherits="eMeng.Exam.DataGridPaging.DataGridPaging" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <meta content="JavaScript" name="vs_defaultClientScript"> <meta content="http://schemas.microsoft.com/intellisense/ie5 " name="vs_targetSchema"> </head> <body ms_positioning="GridLayout"> <form id="Form1" runat="server"> <asp:DataGrid ID="MyDataGrid" runat="server" AutoGenerateColumns="False" HorizontalAlign="Center" AlternatingItemStyle-BackColor="#eeeeee" HeaderStyle-BackColor="#aaaadd" Font-Size="8pt" Font-Name="Verdana" CellSpacing="0" CellPadding="3" GridLines="Both" BorderWidth="1" BorderColor="black" OnPageIndexChanged="MyDataGrid_Page" PagerStyle-HorizontalAlign="Right" PagerStyle-Mode="NumericPages" PageSize="3" AllowPaging="True"> <AlternatingItemStyle BackColor="#EEEEEE"></AlternatingItemStyle> <HeaderStyle BackColor="#AAAADD" Font-Bold="True" HorizontalAlign="Center"></HeaderStyle> <PagerStyle HorizontalAlign="Right" Mode="NumericPages"></PagerStyle> <Columns> <asp:BoundColumn HeaderText="标题" DataField="M_Name" HeaderStyle-Width="480px"></asp:BoundColumn> <asp:BoundColumn HeaderText="推荐" DataField="M_Recomm" DataFormatString="{0:yyyy-MM-dd hh:mm:ss}"> </asp:BoundColumn> </Columns> </asp:DataGrid> <p style="font-size: 9pt" align="center"> <asp:Label ID="lblPageCount" runat="server"></asp:Label> <asp:Label ID="lblCurrentIndex" runat="server"></asp:Label> <asp:LinkButton ID="btnFirst" OnClick="PagerButtonClick" runat="server" Font-Name="verdana" Font-Size="8pt" ForeColor="navy" CommandArgument="0"></asp:LinkButton> <asp:LinkButton ID="btnPrev" OnClick="PagerButtonClick" runat="server" Font-Name="verdana" Font-Size="8pt" ForeColor="navy" CommandArgument="prev"></asp:LinkButton> <asp:LinkButton ID="btnNext" OnClick="PagerButtonClick" runat="server" Font-Name="verdana" Font-Size="8pt" ForeColor="navy" CommandArgument="next"></asp:LinkButton> <asp:LinkButton ID="btnLast" OnClick="PagerButtonClick" runat="server" Font-Name="verdana" Font-Size="8pt" ForeColor="navy" CommandArgument="last"></asp:LinkButton> </p> </form> </body> </html>
DataGridPaging.aspx.cs
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.Security; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Configuration; using System.Data.SqlClient;
namespace eMeng.Exam.DataGridPaging { /// <summary> /// DataGridPaging 的摘要说明。 /// </summary> public partial class DataGridPaging : System.Web.UI.Page { //protected System.Web.UI.WebControls.DataGrid MyDataGrid; //protected System.Web.UI.WebControls.Label lblPageCount; //protected System.Web.UI.WebControls.Label lblCurrentIndex; //protected System.Web.UI.WebControls.LinkButton btnFirst; //protected System.Web.UI.WebControls.LinkButton btnPrev; //protected System.Web.UI.WebControls.LinkButton btnNext; //protected System.Web.UI.WebControls.LinkButton btnLast; private SqlConnection cn = new SqlConnection();
private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 btnFirst.Text = "最首页"; btnPrev.Text = "前一页"; btnNext.Text = "下一页"; btnLast.Text = "最后页"; OpenDatabase(); BindGrid(); } private void OpenDatabase() { cn = new SqlConnection(ConfigurationManager.ConnectionStrings["3gdyConn"].ConnectionString); //这里请自己修改Web.config文件的数据库连接字符串 cn.Open(); } private void ShowStats() { lblCurrentIndex.Text = "第 " + (MyDataGrid.CurrentPageIndex + 1).ToString() + " 页"; lblPageCount.Text = "总共 " + MyDataGrid.PageCount.ToString() + " 页"; }
public void PagerButtonClick(object sender, EventArgs e) { string arg = ((LinkButton)sender).CommandArgument.ToString(); switch (arg) { case "next": if (MyDataGrid.CurrentPageIndex < (MyDataGrid.PageCount - 1)) { MyDataGrid.CurrentPageIndex += 1; } break; case "prev": if (MyDataGrid.CurrentPageIndex > 0) { MyDataGrid.CurrentPageIndex -= 1; } break; case "last": MyDataGrid.CurrentPageIndex = (MyDataGrid.PageCount - 1); break; default: MyDataGrid.CurrentPageIndex = System.Convert.ToInt32(arg); break; } BindGrid(); ShowStats(); } public void BindGrid() { SqlConnection myConnection = cn; DataSet ds = new DataSet(); SqlDataAdapter adapter = new SqlDataAdapter("Select M_Name,M_Recomm from [Movie]", myConnection); //adapter.SelectCommand = new System.Data.SqlClient.SqlCommand("Select * From [Movie]", myConnection); adapter.Fill(ds, "Document"); MyDataGrid.DataSource = ds.Tables["Document"].DefaultView; MyDataGrid.DataBind(); ShowStats(); } public void MyDataGrid_Page(object sender, DataGridPageChangedEventArgs e) { int startIndex; startIndex = MyDataGrid.CurrentPageIndex * MyDataGrid.PageSize; MyDataGrid.CurrentPageIndex = e.NewPageIndex; BindGrid(); ShowStats(); }
#region Web Form Designer generated code override protected void OnInit(EventArgs e) { // // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); }
/// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load);
} #endregion } }