最近一直很忙,看来7月份又只写了两篇日志。没时间更新 blog ,其实也是没什么可写的,前几天群里有个朋友问我Repeater控件分页的问题,我大概给他讲了一下,说DataGrid可以实现分页,是因为其下封装了PagedDataSource,我们可以利用它来对Repeater进行分页,但这个朋友说网上找到的资料多数只写出了“上一页”和“下一页”,没有总页数的列表,能够点击任意的页数进行查询,所以我就做了一份,代码如下。
代码:
ReapterDemo.aspx 页面 (Repeater 设置) :
< asp:Repeater id = " rptData " runat = " server " >
< ItemTemplate >
< font color = " #ff3333 " > 用户ID: <% # DataBinder.Eval(Container.DataItem, " CustomerID " ) %>
< br >
名字: & nbsp; & nbsp; <% # DataBinder.Eval(Container.DataItem, " ShipName " ) %>
< br >
地址: & nbsp; & nbsp; <% # DataBinder.Eval(Container.DataItem, " ShipAddress " ) %>
</ font >
</ ItemTemplate >
< AlternatingItemTemplate >
< font color = " #3300ff " > 用户ID: <% # DataBinder.Eval(Container.DataItem, " CustomerID " ) %>
< br >
名字: & nbsp; & nbsp; <% # DataBinder.Eval(Container.DataItem, " ShipName " ) %>
< br >
地址: & nbsp; & nbsp; <% # DataBinder.Eval(Container.DataItem, " ShipAddress " ) %>
</ font >
</ AlternatingItemTemplate >
< SeparatorTemplate >
< hr size = " 1 " >
</ SeparatorTemplate >
< FooterTemplate >
< br >
< br >
<% # WriteLink() %>
</ FooterTemplate >
</ asp:Repeater >
代码2:ReapterDemo.aspx.cs
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using AspDotNetStudy.DataAccess;
namespace AspDotNetStudy
... {
/**//// <summary>
/// ReapterDemo 的摘要说明。
/// </summary>
public class ReapterDemo : System.Web.UI.Page
...{
protected System.Web.UI.WebControls.Repeater rptData;
private DBOpera dbo;
private PagedDataSource _pds;
private void Page_Load(object sender, System.EventArgs e)
...{
// 在此处放置用户代码以初始化页面
if(!this.IsPostBack)
...{
if(Request["id"] == null)
...{
this.BindReapter(1);
}
else
...{
this.BindReapter(Convert.ToInt32(Request.QueryString["id"]));
}
}
}
Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
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
private void BindReapter(int recordPos)
...{
dbo = new DBOpera();
_pds = dbo.GetDataSource("select * from Orders", recordPos);
Response.Write("查询结果占用页数:" + _pds.PageCount);
Response.Write(" 当前页号为:" + (_pds.CurrentPageIndex + 1).ToString());
rptData.DataSource = _pds;
rptData.DataBind();
}
public string WriteLink()
...{
string s = null;
for(int i = 1;i <= _pds.PageCount;i++)
...{
s += "<a href=ReapterDemo.aspx?id=" + i.ToString() +
">" + i.ToString() + "页</a> ";
}
return s;
}
}
}
代码3:DBOpera.cs
using System;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI.WebControls;
namespace AspDotNetStudy.DataAccess
... {
/**//// <summary>
/// DBOpera 的摘要说明。
/// </summary>
public class DBOpera
...{
private SqlConnection _sqlCon;
// private SqlDataReader _sdr;
// private SqlCommand _sqlCommand;
private SqlDataAdapter _sda;
private System.Web.UI.WebControls.PagedDataSource _pds;
public DBOpera()
...{
//
// TODO: 在此处添加构造函数逻辑
//
}
public void CreateConnection()
...{
_sqlCon = new SqlConnection("Server=.;Database=Northwind;Uid=sa;pwd=");
_sqlCon.Open();
}
public void DisConnection()
...{
_sqlCon.Close();
_sqlCon.Dispose();
}
public PagedDataSource GetDataSource(string strSql, int recordPos)
...{
DataTable tempTable = new DataTable();
try
...{
this.CreateConnection();
_sda = new SqlDataAdapter(strSql, _sqlCon);
_sda.Fill(tempTable);
_pds = new System.Web.UI.WebControls.PagedDataSource();
_pds.DataSource = tempTable.DefaultView;
_pds.AllowPaging = true;
_pds.PageSize = 30;
_pds.CurrentPageIndex = recordPos - 1;
return _pds;
}
catch(Exception e)
...{
Console.WriteLine(e.Message);
return null;
}
finally
...{
_sda.Dispose();
_sqlCon.Dispose();
}
}
}
}
< asp:Repeater id = " rptData " runat = " server " >
< ItemTemplate >
< font color = " #ff3333 " > 用户ID: <% # DataBinder.Eval(Container.DataItem, " CustomerID " ) %>
< br >
名字: & nbsp; & nbsp; <% # DataBinder.Eval(Container.DataItem, " ShipName " ) %>
< br >
地址: & nbsp; & nbsp; <% # DataBinder.Eval(Container.DataItem, " ShipAddress " ) %>
</ font >
</ ItemTemplate >
< AlternatingItemTemplate >
< font color = " #3300ff " > 用户ID: <% # DataBinder.Eval(Container.DataItem, " CustomerID " ) %>
< br >
名字: & nbsp; & nbsp; <% # DataBinder.Eval(Container.DataItem, " ShipName " ) %>
< br >
地址: & nbsp; & nbsp; <% # DataBinder.Eval(Container.DataItem, " ShipAddress " ) %>
</ font >
</ AlternatingItemTemplate >
< SeparatorTemplate >
< hr size = " 1 " >
</ SeparatorTemplate >
< FooterTemplate >
< br >
< br >
<% # WriteLink() %>
</ FooterTemplate >
</ asp:Repeater >
代码2:ReapterDemo.aspx.cs
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using AspDotNetStudy.DataAccess;
namespace AspDotNetStudy
... {
/**//// <summary>
/// ReapterDemo 的摘要说明。
/// </summary>
public class ReapterDemo : System.Web.UI.Page
...{
protected System.Web.UI.WebControls.Repeater rptData;
private DBOpera dbo;
private PagedDataSource _pds;
private void Page_Load(object sender, System.EventArgs e)
...{
// 在此处放置用户代码以初始化页面
if(!this.IsPostBack)
...{
if(Request["id"] == null)
...{
this.BindReapter(1);
}
else
...{
this.BindReapter(Convert.ToInt32(Request.QueryString["id"]));
}
}
}
Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
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
private void BindReapter(int recordPos)
...{
dbo = new DBOpera();
_pds = dbo.GetDataSource("select * from Orders", recordPos);
Response.Write("查询结果占用页数:" + _pds.PageCount);
Response.Write(" 当前页号为:" + (_pds.CurrentPageIndex + 1).ToString());
rptData.DataSource = _pds;
rptData.DataBind();
}
public string WriteLink()
...{
string s = null;
for(int i = 1;i <= _pds.PageCount;i++)
...{
s += "<a href=ReapterDemo.aspx?id=" + i.ToString() +
">" + i.ToString() + "页</a> ";
}
return s;
}
}
}
代码3:DBOpera.cs
using System;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI.WebControls;
namespace AspDotNetStudy.DataAccess
... {
/**//// <summary>
/// DBOpera 的摘要说明。
/// </summary>
public class DBOpera
...{
private SqlConnection _sqlCon;
// private SqlDataReader _sdr;
// private SqlCommand _sqlCommand;
private SqlDataAdapter _sda;
private System.Web.UI.WebControls.PagedDataSource _pds;
public DBOpera()
...{
//
// TODO: 在此处添加构造函数逻辑
//
}
public void CreateConnection()
...{
_sqlCon = new SqlConnection("Server=.;Database=Northwind;Uid=sa;pwd=");
_sqlCon.Open();
}
public void DisConnection()
...{
_sqlCon.Close();
_sqlCon.Dispose();
}
public PagedDataSource GetDataSource(string strSql, int recordPos)
...{
DataTable tempTable = new DataTable();
try
...{
this.CreateConnection();
_sda = new SqlDataAdapter(strSql, _sqlCon);
_sda.Fill(tempTable);
_pds = new System.Web.UI.WebControls.PagedDataSource();
_pds.DataSource = tempTable.DefaultView;
_pds.AllowPaging = true;
_pds.PageSize = 30;
_pds.CurrentPageIndex = recordPos - 1;
return _pds;
}
catch(Exception e)
...{
Console.WriteLine(e.Message);
return null;
}
finally
...{
_sda.Dispose();
_sqlCon.Dispose();
}
}
}
}