ASP.NET提供的Repeater模板并不带有分页功能,如果是少量数据的话利用Repeater模板来实现分页还是不错的,毕竟Repeater模板较为灵活。
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="WebApplication1.WebForm1" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ><HTML> <HEAD> <title>WebForm1</title> <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1"> <meta name="CODE_LANGUAGE" Content="C#"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server"> <FONT face="宋体"> <asp:Repeater id="Repeater1" runat="server"> <HeaderTemplate> <table border="0"> <tr> <td><font color="Highlight">编号</font></td> <td><font color="Highlight">名称</font></td> <td><font color="Highlight">描述</font></td> </tr> </HeaderTemplate> <ItemTemplate> <tr bgcolor="LightYellow"> <td> <%# DataBinder.Eval(Container.DataItem,"CategoryID") %> </td> <td> <%# DataBinder.Eval(Container.DataItem,"CategoryName") %> </td> <td> <%# DataBinder.Eval(Container.DataItem,"Description") %> </td> </tr> </ItemTemplate> <AlternatingItemTemplate> <tr> <td><%# DataBinder.Eval(Container.DataItem,"CategoryID") %></td> <td><%# DataBinder.Eval(Container.DataItem,"CategoryName") %></td> <td><%# DataBinder.Eval(Container.DataItem,"Description") %></td> </tr> </AlternatingItemTemplate> <FooterTemplate> </table> <asp:ImageButton CommandName="previous" ID="previous" ImageUrl=".\images\previous.gif" Runat="server" /> <asp:ImageButton CommandName="next" ID="next" ImageUrl=".\images\next.gif" Runat="server" /> </FooterTemplate> </asp:Repeater></FONT> </form> </body></HTML>using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Data.SqlClient;using System.Drawing;using System.Web;using System.Web.SessionState;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.HtmlControls;namespace WebApplication1{ /**//// <summary> /// WebForm1 的摘要说明。 /// </summary> public class WebForm1 : System.Web.UI.Page { protected System.Web.UI.WebControls.Repeater Repeater1; protected SqlConnection con = null; protected string CON_STR="server=192.168.0.99;database=Northwind;user id=sa;password=jabby"; protected string SQL_QUERY="select * from Categories"; protected SqlDataAdapter da = null; protected DataSet ds = null; private void Page_Load(object sender, System.EventArgs e) { if(!Page.IsPostBack) { BindData(0,4); } } Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码 override protected void OnInit(EventArgs e) { // // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /**//// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.Repeater1.ItemCommand += new System.Web.UI.WebControls.RepeaterCommandEventHandler(this.Repeater1_ItemCommand); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void BindData(int start,int end) { try { con = new SqlConnection(CON_STR); } catch(SqlException sqlexp) { Response.Write("Connect to database Error! "+sqlexp.Message); } da = new SqlDataAdapter(SQL_QUERY,con); ds = new DataSet(); try { da.Fill(ds,start,end,"Categories"); this.Repeater1.DataSource = ds; this.Repeater1.DataBind(); } catch(Exception exp) { Response.Write(exp.Message); } finally { con.Close(); } } private void Repeater1_ItemCommand(object sender,System.Web.UI.WebControls.RepeaterCommandEventArgs e) { if(e.CommandName.Equals("next")) { BindData(4,7); } else if(e.CommandName.Equals("previous")) { BindData(0,4); } } }}此分页利用的是DataAdapter的Fill功能,但它提供的这种方式效率较低,因此只适用于少量数据,在大量数据情况下效率明显降低。
截图:
编号
名称
描述
1
Beverages
Soft drinks, coffees, teas, beers, and ales
2
Condiments
Sweet and savory sauces, relishes, spreads, and seasonings
3
Confections
Desserts, candies, and sweet breads
4
Dairy Products
Cheeses
编号
名称
描述
5
Grains/Cereals
Breads, crackers, pasta, and cereal
6
Meat/Poultry
Prepared meats
7
Produce
Dried fruit and bean curd
8
Seafood
Seaweed and fish