分页控件
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="myPage.ascx.cs"
Inherits="photo_myPage" %>
<style type="text/css">
a{ color:#FF9900;}
a:hover{ color:Red; background-color:#FF9900;}
.LinkButton
{
width:20px;
border:solid 1px #FF9900;
text-align:center;
}
</style>
<div style =" font-size :9pt;">
<table cellspacing="0" cellpadding="5" width="100%" border="0" style ="font-size :9pt;
color:Black ;">
<tr>
<td style ="width:40%;">
○页次:<asp:Label ID="lblCurrentPage" runat="server" ForeColor="#e78a29"></asp:Label>
页/<asp:Label ID="lblPageCount" runat="server"></asp:Label>页,共<asp:Label
ID="lblRowsCount" runat="server" ForeColor="#e78a29"></asp:Label>条记录
</td>
<td style ="width:60%;">
<span id ="Text" runat ="server" >
[<asp:linkbutton id="btnFirst" runat="server" OnClick="LinkButton_Click"
ForeColor="Black" Font-Underline ="false"
CommandName="First" Text="首 页" >首 页
</asp:linkbutton>]
[<asp:linkbutton id="btnPrev" runat="server" OnClick="LinkButton_Click"
ForeColor="Black" Font-Underline ="false"
CommandName="Prev" Text="上一页">上一页
</asp:linkbutton>]
[<asp:linkbutton id="btnNext" runat="server" OnClick="LinkButton_Click"
ForeColor="Black" Font-Underline ="false"
CommandName="Next" Text="下一页">下一页
</asp:linkbutton>]
[<asp:linkbutton id="btnLast" runat="server" OnClick="LinkButton_Click"
ForeColor="Black" Font-Underline ="false"
CommandName="Last" Text="尾 页">尾 页
</asp:linkbutton>]
</span>
<span id ="Prev" runat ="server" >
<%-- <asp:LinkButton ID="lnkbtnFT" runat="server" CommandArgument="FT" OnClick="lnkbtn"
Text="7" Font-Names="Webdings" ForeColor ="Black" Font-Underline ="false" ></asp:LinkButton>
<asp:LinkButton ID="lnkbtnPR" runat="server" CommandArgument="PR" OnClick="lnkbtn"
Text="3" Font-Names="Webdings" ForeColor ="Black" Font-Underline ="false"
></asp:LinkButton>--%>
<asp:LinkButton ID="lnkbtnFT" runat="server" CommandArgument="FT"
OnClick="lnkbtn" Font-Underline ="false"
CssClass="LinkButton" >『首页』</asp:LinkButton>
<asp:LinkButton ID="lnkbtnPR" runat="server" CommandArgument="PR" OnClick="lnkbtn"
Font-Underline ="false" CssClass="LinkButton" >『上一页』</asp:LinkButton>
</span>
<span id ="Number" runat ="server" >
<asp:LinkButton id="lnkbtn0" runat="server" OnClick ="lnkbtn_Click" Font-
Overline="false" Width="20px" CssClass="LinkButton"></asp:LinkButton>
<asp:LinkButton id="lnkbtn1" runat="server" OnClick ="lnkbtn_Click" Font-
Overline="false" Width="20px" CssClass="LinkButton"></asp:LinkButton>
<asp:LinkButton id="lnkbtn2" runat="server" OnClick ="lnkbtn_Click" Font-
Overline="false" Width="20px" CssClass="LinkButton"></asp:LinkButton>
<asp:LinkButton id="lnkbtn3" runat="server" OnClick ="lnkbtn_Click" Font-
Overline="false" Width="20px" CssClass="LinkButton"></asp:LinkButton>
<asp:LinkButton id="lnkbtn4" runat="server" OnClick ="lnkbtn_Click" Font-
Overline="false" Width="20px" CssClass="LinkButton"></asp:LinkButton>
<asp:LinkButton id="lnkbtn5" runat="server" OnClick ="lnkbtn_Click" Font-
Overline="false" Width="20px" CssClass="LinkButton"></asp:LinkButton>
<asp:LinkButton id="lnkbtn6" runat="server" OnClick ="lnkbtn_Click" Font-
Overline="false" Width="20px" CssClass="LinkButton"></asp:LinkButton>
<asp:LinkButton id="lnkbtn7" runat="server" OnClick ="lnkbtn_Click" Font-
Overline="false" Width="20px" CssClass="LinkButton"></asp:LinkButton>
<asp:LinkButton id="lnkbtn8" runat="server" OnClick ="lnkbtn_Click" Font-
Overline="false" Width="20px" CssClass="LinkButton"></asp:LinkButton>
<asp:LinkButton id="lnkbtn9" runat="server" OnClick ="lnkbtn_Click" Font-
Overline="false" Width="20px" CssClass="LinkButton"></asp:LinkButton>
</span>
<span id ="Next" runat ="server" >
<%-- <asp:LinkButton ID="lnkbtnNT" runat="server" CommandArgument="NT" OnClick="lnkbtn"
Text="4" Font-Names="Webdings" ForeColor ="Black" Font-Underline ="false" ></asp:LinkButton>
<asp:LinkButton ID="lnkbtnLT" runat="server" CommandArgument="LT" OnClick="lnkbtn"
Text="8" Font-Names="Webdings" ForeColor ="Black" Font-Underline ="false"
></asp:LinkButton>--%>
<asp:LinkButton ID="lnkbtnNT" runat="server" CommandArgument="NT" OnClick="lnkbtn"
Font-Underline ="false" CssClass="LinkButton" >『下一页』</asp:LinkButton>
<asp:LinkButton ID="lnkbtnLT" runat="server" CommandArgument="LT" OnClick="lnkbtn"
Font-Underline ="false" CssClass="LinkButton" >『末页』</asp:LinkButton>
</span>
</td>
</tr>
</table>
</div>
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;
using System.Data.SqlClient;
public partial class photo_myPage : System.Web.UI.UserControl
{
//总记录数
private int total;
public int Total
{
get { return total; }
set { total = value; }
}
//当前页
private int currentpage;
public int CurrentPage
{
get
{
return Convert.ToInt32(this.lblCurrentPage.Text);
}
}
//每页记录数
private int pagesize;
public int PageSize
{
get { return pagesize; }
set { pagesize = value; }
}
//总页数
private int totalpage;
//控件绑定id
private string dataid;
public string DataID
{
get { return dataid; }
set { dataid = value; }
}
//是否是存储过程
public bool IsProcedure
{
set { ViewState["flag"] = value; }//flag标记
}
//定义一个查询的值用视图状态保存
public string Query
{
set { ViewState["query"] = value; }
get { return ViewState["query"].ToString(); }
}
//控件类型(GridView,DataList,Repeater)
//private string controltype;
//public string ControlType
//{
// get { return controltype; }
// set { controltype = value; }
//}
public enum ControlDisplay { GridView, DataList, Repeater };
ControlDisplay controltype;
public ControlDisplay ControlType
{
set { controltype = value; }
}
//定义一个枚举选择显示分页的样式
public enum Display { Text, Num };
Display showtype = Display.Text;
public Display ShowType
{
set { showtype = value; }
}
//定义一个参数集合
ArrayList arrparameter = null;
//定义一个sql参数的数组
public SqlParameter[] Parameter
{
set
{
arrparameter = new ArrayList();
foreach (SqlParameter param in value)
{
Hashtable ht = new Hashtable();
ht.Add("name", param.ParameterName);
ht.Add("value", param.Value);
arrparameter.Add(ht);
}
ViewState["parameter"] = arrparameter;
}
}
//页面加载事件
protected void Page_Load(object sender, EventArgs e)
{
this.Visible = true;
if (showtype == Display.Text)
{
Text.Visible = true;
Prev.Visible = false;
Number.Visible = false;
Next.Visible = false;
}
else
{
Text.Visible = false;
Prev.Visible = true;
Number.Visible = true;
Next.Visible = true;
}
}
//实现控件的数据的绑定
public void GetData(int pagenum)
{
DataTable dt = new DataTable();
SqlConnection conn = new SqlConnection(DBUtility.SqlHelper.connectionString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
if (ViewState["flag"] != null && (bool)ViewState["flag"] == true)
{
cmd.CommandType = CommandType.StoredProcedure;
if (ViewState["parameter"] != null)
{
foreach (object array in (ArrayList)ViewState["parameter"])
{
Hashtable ht = (Hashtable)array;
SqlParameter sqlparameter = new SqlParameter(ht["name"].ToString(), ht
["value"]);
cmd.Parameters.Add(sqlparameter);
}
}
}
cmd.CommandText = ViewState["query"].ToString();
cmd.Connection.Open();
dt.Load(cmd.ExecuteReader());
cmd.Connection.Close();
total = dt.Rows.Count;//总记录数等于表的总行数
currentpage = pagenum;//当前页数
if (total % pagesize == 0)//如果总记录数对页行数取模为0则取相除的商否则取相除的商再
加1
{
totalpage = total / pagesize;
}
else
{
totalpage = total / pagesize + 1;
}
Bind(dt, pagenum);
}
//绑定控件
public void Bind(DataTable dt, int pagenum)
{
PagedDataSource pds = new PagedDataSource();
pds.AllowPaging = true;
pds.PageSize = pagesize;
pds.CurrentPageIndex = pagenum - 1;
pds.DataSource = dt.DefaultView;
if (controltype == ControlDisplay.GridView)
{
GridView rpt_NewsList = (GridView)Page.FindControl(dataid);
rpt_NewsList.DataSource = pds;
rpt_NewsList.DataBind();
}
else if (controltype == ControlDisplay.DataList)
{
DataList rpt_NewsList = (DataList)Page.FindControl(dataid);
rpt_NewsList.DataSource = pds;
rpt_NewsList.DataBind();
}
else if (controltype == ControlDisplay.Repeater)
{
Repeater rpt_NewsList = (Repeater)Page.FindControl(dataid);
rpt_NewsList.DataSource = pds;
rpt_NewsList.DataBind();
}
}
//文本导航显示状态
private void ChangeState(bool b1, bool b2)
{
btnFirst.Enabled = b1;
btnPrev.Enabled = b1;
btnNext.Enabled = b2;
btnLast.Enabled = b2;
}
//数字导航显示状态
private void ChangeState1(bool b1, bool b2)
{
lnkbtnFT.Enabled = b1;
lnkbtnPR.Enabled = b1;
lnkbtnNT.Enabled = b2;
lnkbtnLT.Enabled = b2;
}
//PreRender - 预呈现,对页的内容进行最后更改此事件在Load事件之后
protected void Page_PreRender(object sender, EventArgs e)
{
if (lblCurrentPage.Text == "")
{
currentpage = 1;
}
else
{
currentpage = Convert.ToInt32(this.lblCurrentPage.Text);
}
if (ViewState["query"] == null || ViewState["query"].ToString() == string.Empty)
{
this.Visible = false;
return;
}
GetData(currentpage);
//判断表内是否存在数据
if (total == 0)
{
this.Visible = false;
}
else
{
this.Visible = true;
}
//文本导航显示
if (Text.Visible == true)
{
if (currentpage == 1 && totalpage > 1)
{
ChangeState(false, true);
}
else if (currentpage == totalpage && totalpage > 1)
{
ChangeState(true, false);
}
else if (totalpage == 1)
{
ChangeState(false, false);
}
else
{
ChangeState(true, true);
}
}
//数字导航显示
else
{
int startpage;//当前页
int endpage;//结束页
//显示数字页码
if (lnkbtn0.Text == "")
{
startpage = 1;
endpage = startpage + 10;
}
else
{
startpage = Convert.ToInt32(lnkbtn0.Text);
endpage = startpage + 10;
}
if (endpage > totalpage)
{
endpage = totalpage;
}
//遍历显示数字
for (int i = 0; i < 10; i++)
{
LinkButton lnkbtn = (this.FindControl("lnkbtn" + i) as
LinkButton);//lnkbtn0,lnkbtn1,lnkbtn2,lnkbtn3,lnkbtn4
lnkbtn.Attributes.Add("runat", "server");
if (i + startpage <= endpage)//
{
lnkbtn.Text = Convert.ToString((i + startpage));//显示变换的数字
if (currentpage == startpage + i)
{
lnkbtn.Enabled = false;
//lnkbtn.Style.Add("BackColor", "Red");
//lnkbtn.Style.Add("ForeColor", "Blue");
}
else
{
lnkbtn.Enabled = true;
}
}
else
{
lnkbtn.Text = "";//超出页面范围则不显示
}
}
//符号导航显示
if (totalpage > 1 && totalpage < 10)
{
ChangeState1(false, false);
}
else if (currentpage == 1 && totalpage > 1)
{
ChangeState1(false, true);
}
else if (currentpage == totalpage && totalpage > 1)
{
ChangeState1(true, false);
}
else if (totalpage == 1)
{
ChangeState1(false, false);
}
else if (totalpage-currentpage<totalpage%10)
{
ChangeState1(true, false);
}
else
{
ChangeState1(true, true);
}
}
lblCurrentPage.Text = currentpage.ToString();
lblPageCount.Text = totalpage.ToString();
lblRowsCount.Text = total.ToString();
}
//文本设置当前页
protected void LinkButton_Click(object sender, EventArgs e)
{
switch ((sender as LinkButton).CommandName)
{
case "First":
{
this.lblCurrentPage.Text = "1";
break;
}
case "Prev":
this.lblCurrentPage.Text = Convert.ToInt32(this.lblCurrentPage.Text) > 1 ?
(Convert.ToInt32(this.lblCurrentPage.Text) - 1).ToString() : "1";
break;
case "Next":
this.lblCurrentPage.Text = Convert.ToInt32(this.lblCurrentPage.Text) <
Convert.ToInt32(this.lblPageCount.Text) ? (Convert.ToInt32(this.lblCurrentPage.Text) +
1).ToString() : this.lblPageCount.Text;
break;
case "Last":
this.lblCurrentPage.Text = this.lblPageCount.Text;
break;
default:
break;
}
}
//数字设置当前页
protected void lnkbtn_Click(object sender, EventArgs e)
{
string current = (sender as LinkButton).Text;
lblCurrentPage.Text = current;
}
//符号设置当前页
protected void lnkbtn(object serder, EventArgs e)
{
string flag = (serder as LinkButton).CommandArgument;
int pagenum = 1;
if (flag == "FT")
{
pagenum = 1;
}
else if (flag == "PR")
{
pagenum = Convert.ToInt32(lnkbtn0.Text) - 10;
}
else if (flag == "NT")
{
pagenum = Convert.ToInt32(lnkbtn0.Text) + 10;
}
else if (flag == "LT")
{
pagenum = Convert.ToInt32(lblPageCount.Text) / 10 * 10 + 1;
}
lnkbtn0.Text = pagenum.ToString();
lblCurrentPage.Text = pagenum.ToString();
}
}
<%@ Register Src="~/photo/myPage.ascx" TagName="myPage" TagPrefix="uc4" %>
<uc4:myPage ID="myPage" ControlType="DataList" ShowType="Num" DataID="dlPhoto" PageSize="2"
runat="server" />
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Bind();
}
}
protected void Bind()
{
myPage.Query = "select * from ProductPhoto";
}