.NET中一个自定义用户分页控件
前端HTML代码:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="PageNavigator.ascx.cs" Inherits="PageNavigator" %>
共<asp:Label runat="server" ID="LblRecordCount"/>条记录,共<asp:Label runat="server" ID="LblPageCount">0</asp:Label>页,当前第<asp:Label runat="server" ID="LblPageIndex" />页
<asp:LinkButton ID="LnkBtnFirst" runat="server" CommandName="Page" OnClick="LnkBtnFirst_Click" CssClass="list_link">首页</asp:LinkButton>
<asp:LinkButton ID="LnkBtnPrevious" runat="server" CommandName="Page" OnClick="LnkBtnPrevious_Click" CssClass="list_link">上一页</asp:LinkButton>
<%-- <asp:LinkButton ID="PageChange1" Visible="false" runat="server" CommandName="Page" OnClick="PageChange_Click" CssClass="list_link">[1]</asp:LinkButton>
<asp:LinkButton ID="PageChange2" runat="server" Visible="false" CommandName="Page" OnClick="PageChange_Click" CssClass="list_link">[2]</asp:LinkButton>
<asp:LinkButton ID="PageChange3" runat="server" Visible="false" CommandName="Page" CssClass="list_link" OnClick="PageChange_Click">[3]</asp:LinkButton>
<asp:LinkButton ID="PageChange4" runat="server" Visible="false" CommandName="Page" CssClass="list_link" OnClick="PageChange_Click">[4]</asp:LinkButton>
<asp:LinkButton ID="PageChange5" runat="server" Visible="false" CommandName="Page" CssClass="list_link" OnClick="PageChange_Click">[5]</asp:LinkButton>
<asp:LinkButton ID="PageChange6" runat="server" Visible="false" CommandName="Page" CssClass="list_link" OnClick="PageChange_Click">[6]</asp:LinkButton>
<asp:LinkButton ID="PageChange7" runat="server" Visible="false" CommandName="Page" CssClass="list_link" OnClick="PageChange_Click">[7]</asp:LinkButton>
<asp:LinkButton ID="PageChange8" runat="server" Visible="false" CommandName="Page" CssClass="list_link" OnClick="PageChange_Click">[8]</asp:LinkButton>
<asp:LinkButton ID="PageChange9" runat="server" Visible="false" CommandName="Page" CssClass="list_link" OnClick="PageChange_Click">[9]</asp:LinkButton>
<asp:LinkButton ID="PageChange10" runat="server" Visible="false" CommandName="Page" CssClass="list_link" OnClick="PageChange_Click">[10]</asp:LinkButton> --%>
<asp:LinkButton ID="LnkBtnNext" runat="server" CommandName="Page" OnClick="LnkBtnNext_Click" CssClass="btn">下一页</asp:LinkButton>
<asp:LinkButton ID="LnkBtnLast" runat="server" CommandName="Page" OnClick="LnkBtnLast_Click" CssClass="list_link">尾页</asp:LinkButton>
<asp:textbox id="txtNewPageIndex" runat="server" width="20px" CssClass="form"/>
<asp:linkbutton id="LnkBtnGoto" runat="server" causesvalidation="False" commandargument="-1" commandname="Page" text="转到此页" OnClick="LnkBtnGoto_Click" CssClass="list_link" />
后台代码:
//======================================================
//== (c)2008 aspxcms inc by NeTCMS v1.0 ==
//== Forum:bbs.aspxcms.com ==
//== Website:www.aspxcms.com ==
//======================================================
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public delegate void PageChangeHandler(object send, int nPageIndex);
public partial class PageNavigator : System.Web.UI.UserControl
{
public event PageChangeHandler OnPageChange;
private int _PageCount = 0;
private int _RecordCount = 0;
private int _PageIndex = 1;
protected void Page_Load(object sender, EventArgs e)
{
//if (!IsPostBack)
//{
// PageChange1.Attributes["pgno"] = "1";
// PageChange2.Attributes["pgno"] = "2";
// PageChange3.Attributes["pgno"] = "3";
// PageChange4.Attributes["pgno"] = "4";
// PageChange5.Attributes["pgno"] = "5";
// PageChange6.Attributes["pgno"] = "6";
// PageChange7.Attributes["pgno"] = "7";
// PageChange8.Attributes["pgno"] = "8";
// PageChange9.Attributes["pgno"] = "9";
// PageChange10.Attributes["pgno"] = "10";
// PageChange1.Attributes["lbno"] = "1";
// PageChange2.Attributes["lbno"] = "2";
// PageChange3.Attributes["lbno"] = "3";
// PageChange4.Attributes["lbno"] = "4";
// PageChange5.Attributes["lbno"] = "5";
// PageChange6.Attributes["lbno"] = "6";
// PageChange7.Attributes["lbno"] = "7";
// PageChange8.Attributes["lbno"] = "8";
// PageChange9.Attributes["lbno"] = "9";
// PageChange10.Attributes["lbno"] = "10";
// for (int i = 1; i <= 10; i++)
// {
// ((LinkButton)this.FindControl("PageChange" + i.ToString())).Attributes["pgno"] = (1 + i - 1).ToString();
// ((LinkButton)this.FindControl("PageChange" + i.ToString())).Text = "[" + (1 + i - 1).ToString() + "]";
// if ((1 + i - 1) <= Int32.Parse(LblPageCount.Text))
// {
// ((LinkButton)this.FindControl("PageChange" + i.ToString())).Visible = true;
// }
// else
// {
// ((LinkButton)this.FindControl("PageChange" + i.ToString())).Visible = false;
// }
// }
// if ((LinkButton)this.FindControl("PageChange" + LblPageIndex.Text.ToString()) != null)
// {
// ((LinkButton)this.FindControl("PageChange" + LblPageIndex.Text.ToString())).CssClass = "pageOn";
// }
//}
}
public int PageCount
{
get
{
return int.Parse(this.LblPageCount.Text);
}
set
{
_PageCount = value;
this.LblPageCount.Text = _PageCount.ToString();
//for (int i = 1; i <= 10; i++)
//{
// ((LinkButton)this.FindControl("PageChange" + i.ToString())).Attributes["pgno"] = (1 + i - 1).ToString();
// ((LinkButton)this.FindControl("PageChange" + i.ToString())).Text = "[" + (1 + i - 1).ToString() + "]";
// if ((1 + i - 1) <= Int32.Parse(LblPageCount.Text))
// {
// ((LinkButton)this.FindControl("PageChange" + i.ToString())).Visible = true;
// }
// else
// {
// ((LinkButton)this.FindControl("PageChange" + i.ToString())).Visible = false;
// }
//}
}
}
public int RecordCount
{
get
{
return int.Parse(this.LblRecordCount.Text);
}
set
{
_RecordCount = value;
this.LblRecordCount.Text = _RecordCount.ToString();
}
}
public int PageIndex
{
get
{
return int.Parse(this.LblPageIndex.Text);
}
set
{
_PageIndex = value;
this.txtNewPageIndex.Text = this.LblPageIndex.Text = _PageIndex.ToString();
if (_PageIndex < 2)
{
this.LnkBtnFirst.Enabled = false;
this.LnkBtnPrevious.Enabled = false;
}
else
{
this.LnkBtnFirst.Enabled = true;
this.LnkBtnPrevious.Enabled = true;
}
if (_PageIndex >= _PageCount)
{
this.LnkBtnNext.Enabled = false;
this.LnkBtnLast.Enabled = false;
}
else
{
this.LnkBtnNext.Enabled = true;
this.LnkBtnLast.Enabled = true;
}
}
}
//protected void PageChange_Click(object sender, EventArgs e)
//{
// int i_currentPgNo = Int32.Parse(((LinkButton)sender).Attributes["pgno"].ToString());
// int i_currentLbNo = Int32.Parse(((LinkButton)sender).Attributes["lbno"].ToString());
// int i_NewPgStartNo = 1;
// if (i_currentPgNo - 5 > 0)
// {
// i_NewPgStartNo = i_currentPgNo - 5+1;
// }
// for (int i = 1; i <= 10; i++)
// {
// ((LinkButton)this.FindControl("PageChange" + i.ToString())).Attributes["pgno"] = (i_NewPgStartNo + i - 1).ToString();
// ((LinkButton)this.FindControl("PageChange" + i.ToString())).Text = "["+(i_NewPgStartNo + i - 1).ToString() + "]";
// if ((i_NewPgStartNo + i - 1) <= Int32.Parse(LblPageCount.Text))
// {
// ((LinkButton)this.FindControl("PageChange" + i.ToString())).Visible = true;
// }else
// {
// ((LinkButton)this.FindControl("PageChange" + i.ToString())).Visible = false;
// }
// if (((LinkButton)this.FindControl("PageChange" + i.ToString())).CssClass == "pageOn")
// {
// ((LinkButton)this.FindControl("PageChange" + i.ToString())).CssClass = "list_link";
// }
// }
// OnPageChange(sender, i_currentPgNo);
// ((LinkButton)this.FindControl("PageChange" + i_currentPgNo.ToString())).CssClass = "pageOn";
//}
protected void LnkBtnFirst_Click(object sender, EventArgs e)
{
try
{
OnPageChange(sender, 1);
//for (int i = 1; i <= 10; i++)
//{
// if (((LinkButton)this.FindControl("PageChange" + i.ToString())).CssClass == "pageOn")
// {
// ((LinkButton)this.FindControl("PageChange" + i.ToString())).CssClass = "list_link";
// }
//}
//((LinkButton)this.FindControl("PageChange1")).CssClass = "pageOn";
}
catch { }
}
protected void LnkBtnPrevious_Click(object sender, EventArgs e)
{
try
{
int n = Convert.ToInt32(this.LblPageIndex.Text);
n--;
OnPageChange(sender, n);
//for (int i = 1; i <= 10; i++)
//{
// if (((LinkButton)this.FindControl("PageChange" + i.ToString())).CssClass == "pageOn")
// {
// ((LinkButton)this.FindControl("PageChange" + i.ToString())).CssClass = "list_link";
// }
//}
//((LinkButton)this.FindControl("PageChange" + n.ToString())).CssClass = "pageOn";
}
catch
{
throw;
}
}
protected void LnkBtnNext_Click(object sender, EventArgs e)
{
try
{
int n = Convert.ToInt32(this.LblPageIndex.Text);
n++;
OnPageChange(sender, n);
//for (int i = 1; i <= 10; i++)
//{
// if (((LinkButton)this.FindControl("PageChange" + i.ToString())).CssClass == "pageOn")
// {
// ((LinkButton)this.FindControl("PageChange" + i.ToString())).CssClass = "list_link";
// }
//}
//((LinkButton)this.FindControl("PageChange" + n.ToString())).CssClass = "pageOn";
}
catch
{
throw;
}
}
protected void LnkBtnLast_Click(object sender, EventArgs e)
{
try
{
int n = Convert.ToInt32(this.LblPageCount.Text);
//for (int i = 1; i <= 10; i++)
//{
// if (((LinkButton)this.FindControl("PageChange" + i.ToString())).CssClass == "pageOn")
// {
// ((LinkButton)this.FindControl("PageChange" + i.ToString())).CssClass = "list_link";
// }
//}
//((LinkButton)this.FindControl("PageChange" + n.ToString())).CssClass = "pageOn";
OnPageChange(sender, n);
}
catch
{
throw;
}
}
protected void LnkBtnGoto_Click(object sender, EventArgs e)
{
int n;
try
{
n = Convert.ToInt32(this.txtNewPageIndex.Text);
}
catch
{
n = Convert.ToInt32(this.LblPageIndex.Text);
}
int np = Convert.ToInt32(this.LblPageCount.Text.Trim());
if (n > np)
n = np;
if (n < 1)
n = 1;
OnPageChange(sender, n);
//for (int i = 1; i <= 10; i++)
//{
// if (((LinkButton)this.FindControl("PageChange" + i.ToString())).CssClass == "pageOn")
// {
// ((LinkButton)this.FindControl("PageChange" + i.ToString())).CssClass = "list_link";
// }
//}
//((LinkButton)this.FindControl("PageChange" + n.ToString())).CssClass = "pageOn";
}
}
调用页面部分代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//int pageIndex = 0;
//int pageSize = 5;
//int rowCount;
//rpNewsList.DataSource = NewMethod(pageIndex, pageSize, out rowCount);
//rpNewsList.DataBind();
//this.PageNavigator1.OnPageChange += new PageChangeHandler(PageNavigator1_OnPageChange);
ListDataBind(1);
}
this.PageNavigator1.OnPageChange += new PageChangeHandler(PageNavigator1_OnPageChange);
}
void PageNavigator1_OnPageChange(object send, int PageIndex)
{
ListDataBind(PageIndex);
}
private void ListDataBind(int PageIndex)
{
int rowCount;
int pageSize = 5;
NewMethod(PageIndex, pageSize, out rowCount);
this.PageNavigator1.PageCount = rowCount % pageSize == 0 ? rowCount / pageSize : rowCount / pageSize + 1;
this.PageNavigator1.RecordCount = rowCount;
this.PageNavigator1.PageIndex = PageIndex;
this.rpProductList.DataSource = NewMethod(PageIndex, pageSize, out rowCount);
this.rpProductList.DataBind();
}
private DataTable NewMethod(int pageIndex, int pageSize, out int rowCount)
{
SqlConnection con = new SqlConnection("server=192.168.0.100;uid=sa;pwd=20080512;database=webshop;");
con.Open();
string selectcount = "select count(*) from product";
SqlCommand cmd = new SqlCommand(selectcount, con);
rowCount = Convert.ToInt32(cmd.ExecuteScalar());
string sql = @"select * from
(select *,row_number() over (order by Id)as IDRank from product where 1=1
) table1 where IDRank> ('" + pageSize * (pageIndex - 1) + "') and IDRank<=('"
+ pageSize * pageIndex + "') order by IDRank desc";
DataSet ds = new DataSet();
SqlDataAdapter sda = new SqlDataAdapter(sql, con);
sda.Fill(ds);
con.Close();
return ds.Tables[0];
}
分页存储过程:
CREATE procedure [dbo].[proc_paged_with_Rownumber]
(
@pageIndex int,
@pageSize int ,
@ClassID varchar(50)
)
as
begin
select * from (select *,Row_number() over(order by Id asc) as IDRank from NT_News where 1=1 and ClassID=@ClassID ) as table1 where IDRank> (@pageSize*(@pageIndex-1)) and IDRank<=(@pageSize*@pageIndex)
end
浙公网安备 33010602011771号