using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
namespace wxc
{
/// <summary>
///作者:kasafuma
/// </summary>
[DefaultProperty("Text"),
ToolboxData("<{0}:Pager runat=server></{0}:Pager>")]
public class Pager : System.Web.UI.Control,INamingContainer
{
[Description("选择页事件")]
public event EventHandler PageChanged;
#region 控件属性列表
[Browsable(false),
Description("数据集所有页的记录总数"),
Category("分页"),
DefaultValue(0)]
public int RecordCount
{
get
{
object obj=ViewState["RecordCount"];
return (obj==null)?0:(int)obj;
}
set
{
ViewState["RecordCount"]=value;
}
}
[Browsable(true),
Description("每页显示的记录数"),
Category("分页"),
DefaultValue(10)]
public int PageSize
{
get
{
object obj=ViewState["PageSize"];
return (obj==null)?10:(int)obj;
}
set
{
ViewState["PageSize"]=value;
}
}
[Browsable(false),
Description("当前显示页"),
Category("分页"),
DefaultValue(0)]
public int CurrentPage
{
get
{
object obj=ViewState["CurrentPage"];
return (obj==null)?0:(int)obj;
}
set
{
ViewState["CurrentPage"]=value;
}
}
[Browsable(false),
Description("数据集页总数"),
Category("分页"),
DefaultValue(0)]
public int PageCount
{
get
{
object obj=ViewState["PageCount"];
return (obj==null)?0:(int)obj;
}
set
{
ViewState["PageCount"]=value;
}
}
[Browsable(true),
Description("首页按钮文本,例如可用:第一页"),
Category("分页")]
public string FirstPageText
{
get
{
object obj=ViewState["FirstPageText"];
return (obj==null)?null:(string)obj;
}
set
{
ViewState["FirstPageText"]=value;
}
}
[Browsable(true),
Description("前页按钮文本,例如可用:上一页"),
Category("分页")]
public string PrevPageText
{
get
{
object obj=ViewState["PrevPageText"];
return (obj==null)?null:(string)obj;
}
set
{
ViewState["PrevPageText"]=value;
}
}
[Browsable(true),
Description("下页按钮文本,例如可用:下一页"),
Category("分页")]
public string NextPageText
{
get
{
object obj=ViewState["NextPageText"];
return (obj==null)?null:(string)obj;
}
set
{
ViewState["NextPageText"]=value;
}
}
[Browsable(true),
Description("尾页按钮文本,例如可用:最后页"),
Category("分页")]
public string LastPageText
{
get
{
object obj=ViewState["LastPageText"];
return (obj==null)?null:(string)obj;
}
set
{
ViewState["LastPageText"]=value;
}
}
#endregion
protected override void CreateChildControls()
{
Label lbl_PageInfo = new Label(); //0
lbl_PageInfo.Font.Size=10;
lbl_PageInfo.Text = "尚未绑定";
Controls.Add(lbl_PageInfo);
LinkButton btn_First = new LinkButton(); //1
btn_First.Text = FirstPageText.ToString();
btn_First.Font.Size=10;
Controls.Add(btn_First);
btn_First.Visible = false;
btn_First.Click += new System.EventHandler(btnFirst_Click);
Controls.Add(new LiteralControl(" ")); //2
LinkButton btn_Prev = new LinkButton(); //3
btn_Prev.Text =PrevPageText.ToString();
btn_Prev.Font.Size=10;
Controls.Add(btn_Prev);
btn_Prev.Visible = false;
btn_Prev.Click += new System.EventHandler(btnPrev_Click);
Controls.Add(new LiteralControl(" ")); //4
LinkButton btn_Next = new LinkButton(); //5
btn_Next.Text = ViewState["NextPageText"].ToString();
btn_Next.Font.Size=10;
Controls.Add(btn_Next);
btn_Next.Visible = false;
btn_Next.Click += new System.EventHandler(btnNext_Click);
Controls.Add(new LiteralControl(" ")); //6
LinkButton btn_Last = new LinkButton(); //7
btn_Last.Text = ViewState["LastPageText"].ToString();
btn_Last.Font.Size=10;
Controls.Add(btn_Last);
btn_Last.Visible = false;
btn_Last.Click += new System.EventHandler(btnLast_Click);
Controls.Add(new LiteralControl(" ")); //8
Label lbl_1 = new Label(); //9
lbl_1.Text = "转到";
lbl_1.Font.Size=10;
lbl_1.Visible = false;
Controls.Add(lbl_1);
DropDownList drop_CurPage = new DropDownList(); //10
drop_CurPage.Items.Add("0");
drop_CurPage.Font.Size=10;
Controls.Add(drop_CurPage);
drop_CurPage.AutoPostBack = true;
drop_CurPage.Visible = false;
drop_CurPage.SelectedIndexChanged += new System.EventHandler(ddlCurrentPage_SelectedIndexChanged);
Label lbl_2 = new Label(); //11
lbl_2.Text = "页";
lbl_2.Font.Size=10;
lbl_2.Visible = false;
Controls.Add(lbl_2);
}
protected override void OnPreRender(EventArgs e)
{
if (!Page.IsPostBack)
{
BindPager();
}
}
protected virtual void PageClick(object sender, EventArgs e)
{
if (PageChanged != null)
{
PageChanged(this,e);
}
}
#region 页面按钮和选择框事件
private void ddlCurrentPage_SelectedIndexChanged(object sender, System.EventArgs e)
{
CurrentPage = ((DropDownList)Controls[10]).SelectedIndex;
BindPager();
SendPageChanged();
}
private void btnFirst_Click(object sender, System.EventArgs e)
{
CurrentPage = 0;
BindPager();
SendPageChanged();
}
private void btnPrev_Click(object sender, System.EventArgs e)
{
CurrentPage = CurrentPage-1;
BindPager();
SendPageChanged();
}
private void btnNext_Click(object sender, System.EventArgs e)
{
CurrentPage = CurrentPage+1;
BindPager();
SendPageChanged();
}
private void btnLast_Click(object sender, System.EventArgs e)
{
CurrentPage = CurrentPage-1;
BindPager();
SendPageChanged();
}
private void SendPageChanged()
{
if (PageChanged != null)
PageClick(this, EventArgs.Empty);
}
#endregion
#region 绑定页面
public void BindPager()
{
PageCount=(RecordCount%PageSize>0) ? RecordCount/PageSize+1:RecordCount/PageSize; //总页数
((Label)Controls[0]).Text="共<font color=red>"+RecordCount.ToString()+"</font>条信息<font color=red>"+PageSize.ToString()+"</font>条/页 当前<font color=red>"+(CurrentPage+1).ToString()+"</font>/<font color=red>"+PageCount.ToString()+"</font>页 ";
((DropDownList)Controls[10]).Items.Clear();
for(int i=0;i<PageCount;i++)
{
((DropDownList)Controls[10]).Items.Add(Convert.ToString(i+1));
}
((DropDownList)Controls[10]).SelectedIndex = ((DropDownList)Controls[10]).Items.IndexOf(((DropDownList)Controls[10]).Items.FindByValue(Convert.ToString(CurrentPage+1)));
((LinkButton)Controls[1]).Visible = true;
((LinkButton)Controls[3]).Visible = true;
((LinkButton)Controls[5]).Visible = true;
((LinkButton)Controls[7]).Visible = true;
((Label)Controls[9]).Visible = true;
((Label)Controls[11]).Visible = true;
((DropDownList)Controls[10]).Visible = true;
((LinkButton)Controls[1]).Enabled = true;
((LinkButton)Controls[3]).Enabled = true;
((LinkButton)Controls[5]).Enabled = true;
((LinkButton)Controls[7]).Enabled = true;
if (CurrentPage==0)
{
((LinkButton)Controls[1]).Enabled = false;
((LinkButton)Controls[3]).Enabled = false;
((LinkButton)Controls[5]).Enabled = true;
((LinkButton)Controls[7]).Enabled = true;
}
if (CurrentPage==PageCount-1)
{
((LinkButton)Controls[1]).Enabled = true; //如果是自定义图片按钮可以 1ibtnFirst.Attributes["disabled"] = "disabled" 不能点; 2ibtnFirst.Attributes.Remove("disabled") ;能点
((LinkButton)Controls[3]).Enabled = true;
((LinkButton)Controls[5]).Enabled = false;
((LinkButton)Controls[7]).Enabled = false;
}
if ((PageCount-1) == 0 )
{
((LinkButton)Controls[1]).Enabled = false;
((LinkButton)Controls[3]).Enabled = false;
((LinkButton)Controls[5]).Enabled = false;
((LinkButton)Controls[7]).Enabled = false;
}
}
#endregion
}
}
调用时候
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此处放置初始化页的用户代码
If Not IsPostBack Then
BindData(0)
End If
End Sub
Private Sub BindData(ByVal CurrentPage As Integer)
txtSQL = "select * from Orders"
DBSet = ExecutePager(txtSQL, CurrentPage, Pager1, ErrorMsg)
Datagrid2.DataSource = DBSet.Tables(0).DefaultView
Datagrid2.DataBind()
Pager1.RecordCount = 47 //当然这样写肯定是错的,这里还需要计算一下页数
Pager1.DataBind()
End Sub
Private Sub Change(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Pager1.PageChanged
BindData(Pager1.CurrentPage)
End Sub
在模块中写个公用函数:
Public Function ExecutePager(ByVal strSQL As String, ByVal CurrentPage As Integer, ByVal Pager As Object, ByRef errMsg As String) As DataSet
Dim cnn As SqlClient.SqlConnection
Dim cmd As New SqlClient.SqlCommand
Dim adpt As SqlClient.SqlDataAdapter
Dim rst As New DataSet
Dim SplitSQL() As String
errMsg = ""
Try
cnn = New SqlClient.SqlConnection("data source=(local);initial catalog=Northwind;user id=sa;pwd='hyaocuk!'")
adpt = New SqlClient.SqlDataAdapter(strSQL, cnn)
adpt.Fill(rst, Pager.PageSize * CurrentPage, Pager.PageSize, "tb")
'这种分页效率也不是很高的,最好调用存储过程分页
ExecutePager = rst
Catch ex As Exception
errMsg = ex.Message
Finally
rst = Nothing
cnn = Nothing
End Try
End Function