演示地址: Click Me! 分页方法很简单,也很有效率.
代码:
int
pages
=
5
;
int pageSize = 7 ;
OleDbConnection conn = new OleDbConnection( " Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + HttpContext.Current.Server.MapPath( " Northwind.mdb " ));
void Page_Load( object sender, EventArgs e)
{
if (!IsPostBack)
{
dgBind(getSqlString(1));
}
int firstPage = int.Parse(hidFirstPage.Value);
pnlButtons.Controls.Add(getPager(firstPage));
}
string getSqlString( int selectedPage)
{
string[] idsStrArray;
string sqlStr;
if (Session["idStr"] != null)
{
idsStrArray = Session["idStr"].ToString().Split('#');
}
else
{
sqlStr = "SELECT [产品ID] FROM [产品] ORDER BY [供应商ID]";
OleDbDataAdapter da = new OleDbDataAdapter(sqlStr, conn);
DataTable dt = new DataTable();
conn.Open();
da.Fill(dt);
conn.Close();
da.Dispose();
StringBuilder sb = new StringBuilder("");
for (int i = 0; i < dt.Rows.Count; i++)
{
if ((i + 1) % pageSize == 0)
{
sb.Append(dt.Rows[i][0].ToString() + "#");
}
else
{
sb.Append(dt.Rows[i][0].ToString() + ",");
}
}
sb.Remove(sb.Length - 1, 1);
idsStrArray = sb.ToString().Split('#');
Session["idStr"] = sb.ToString();
}
hidPageCount.Value = idsStrArray.Length.ToString();
sqlStr = "SELECT [产品].[产品ID], [产品].[产品名称], [供应商].[公司名称], [类别].[类别名称] FROM ";
sqlStr += "(([供应商] INNER JOIN [产品] ON [供应商].[供应商ID] = [产品].[供应商ID]) INNER JOIN [类别] ON ";
sqlStr += "[类别].[类别ID] = [产品].[类别ID]) WHERE [产品ID] IN (" + idsStrArray[selectedPage - 1] + ") ";
sqlStr += "ORDER BY [产品].[供应商ID]";
return sqlStr;
}
Panel getPager( int firstPage)
{
int pageCount = int.Parse(hidPageCount.Value);
Panel pnlPager = new Panel();
pnlPager.Controls.Add(new LiteralControl("<BR> 共" + pageCount.ToString() + "页 "));
pnlPager.Controls.Add(getLinkButton("Fst", "首页", "pgBtn", "1"));
pnlPager.Controls.Add(new LiteralControl(" "));
if (firstPage > 0)
{
pnlPager.Controls.Add(getLinkButton("Pre", "前" + pages.ToString() + "页", "pgBtn", (firstPage - pages + 1).ToString()));
pnlPager.Controls.Add(new LiteralControl(" "));
}
for (int i = firstPage + 1; i < firstPage + pages + 1; i++)
{
if (i > pageCount)
{
break;
}
pnlPager.Controls.Add(getLinkButton(i.ToString(), "[" + i.ToString() + "]", "pgBtn", i.ToString()));
pnlPager.Controls.Add(new LiteralControl(" "));
}
if (firstPage + pages < pageCount)
{
pnlPager.Controls.Add(getLinkButton("Nxt", "后" + pages.ToString() + "页", "pgBtn", (firstPage + pages + 1).ToString()));
pnlPager.Controls.Add(new LiteralControl(" "));
}
pnlPager.Controls.Add(getLinkButton("Lst", "末页", "pgBtn", pageCount.ToString()));
return pnlPager;
}
LinkButton getLinkButton( string lbId, string lbText, string lbCmdName, string lbCmdArg)
{
LinkButton lb = new LinkButton();
lb.ID = lbCmdName + lbId;
lb.Text = lbText;
lb.CommandName = lbCmdName;
lb.CommandArgument = lbCmdArg;
lb.Command += new CommandEventHandler(pageTurn);
return lb;
}
void pageTurn( object sender, CommandEventArgs e)
{
LinkButton lb = (LinkButton)sender;
int selectedPage = int.Parse(lb.CommandArgument);
int firstPage = selectedPage / pages * pages;
firstPage = (selectedPage % pages == 0) ? (firstPage - pages) : firstPage;
hidFirstPage.Value = firstPage.ToString();
dgBind(getSqlString(selectedPage));
pnlButtons.Controls.RemoveAt(pnlButtons.Controls.Count - 1);
pnlButtons.Controls.Add(getPager(firstPage));
lb = (LinkButton)pnlButtons.Controls[pnlButtons.Controls.Count - 1].FindControl("pgBtn" + selectedPage.ToString());
lb.Enabled = false;
}
void dgBind( string sqlStr)
{
OleDbDataAdapter da = new OleDbDataAdapter(sqlStr, conn);
DataTable dt = new DataTable();
conn.Open();
da.Fill(dt);
conn.Close();
da.Dispose();
dg.DataSource = dt;
dg.DataBind();
}
void dg_ItemDataBound( object sender, DataGridItemEventArgs e)
{
dg.Controls[0].EnableViewState = false;
}
int pageSize = 7 ;
OleDbConnection conn = new OleDbConnection( " Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + HttpContext.Current.Server.MapPath( " Northwind.mdb " ));
void Page_Load( object sender, EventArgs e)
{
if (!IsPostBack)
{
dgBind(getSqlString(1));
}
int firstPage = int.Parse(hidFirstPage.Value);
pnlButtons.Controls.Add(getPager(firstPage));
}
string getSqlString( int selectedPage)
{
string[] idsStrArray;
string sqlStr;
if (Session["idStr"] != null)
{
idsStrArray = Session["idStr"].ToString().Split('#');
}
else
{
sqlStr = "SELECT [产品ID] FROM [产品] ORDER BY [供应商ID]";
OleDbDataAdapter da = new OleDbDataAdapter(sqlStr, conn);
DataTable dt = new DataTable();
conn.Open();
da.Fill(dt);
conn.Close();
da.Dispose();
StringBuilder sb = new StringBuilder("");
for (int i = 0; i < dt.Rows.Count; i++)
{
if ((i + 1) % pageSize == 0)
{
sb.Append(dt.Rows[i][0].ToString() + "#");
}
else
{
sb.Append(dt.Rows[i][0].ToString() + ",");
}
}
sb.Remove(sb.Length - 1, 1);
idsStrArray = sb.ToString().Split('#');
Session["idStr"] = sb.ToString();
}
hidPageCount.Value = idsStrArray.Length.ToString();
sqlStr = "SELECT [产品].[产品ID], [产品].[产品名称], [供应商].[公司名称], [类别].[类别名称] FROM ";
sqlStr += "(([供应商] INNER JOIN [产品] ON [供应商].[供应商ID] = [产品].[供应商ID]) INNER JOIN [类别] ON ";
sqlStr += "[类别].[类别ID] = [产品].[类别ID]) WHERE [产品ID] IN (" + idsStrArray[selectedPage - 1] + ") ";
sqlStr += "ORDER BY [产品].[供应商ID]";
return sqlStr;
}
Panel getPager( int firstPage)
{
int pageCount = int.Parse(hidPageCount.Value);
Panel pnlPager = new Panel();
pnlPager.Controls.Add(new LiteralControl("<BR> 共" + pageCount.ToString() + "页 "));
pnlPager.Controls.Add(getLinkButton("Fst", "首页", "pgBtn", "1"));
pnlPager.Controls.Add(new LiteralControl(" "));
if (firstPage > 0)
{
pnlPager.Controls.Add(getLinkButton("Pre", "前" + pages.ToString() + "页", "pgBtn", (firstPage - pages + 1).ToString()));
pnlPager.Controls.Add(new LiteralControl(" "));
}
for (int i = firstPage + 1; i < firstPage + pages + 1; i++)
{
if (i > pageCount)
{
break;
}
pnlPager.Controls.Add(getLinkButton(i.ToString(), "[" + i.ToString() + "]", "pgBtn", i.ToString()));
pnlPager.Controls.Add(new LiteralControl(" "));
}
if (firstPage + pages < pageCount)
{
pnlPager.Controls.Add(getLinkButton("Nxt", "后" + pages.ToString() + "页", "pgBtn", (firstPage + pages + 1).ToString()));
pnlPager.Controls.Add(new LiteralControl(" "));
}
pnlPager.Controls.Add(getLinkButton("Lst", "末页", "pgBtn", pageCount.ToString()));
return pnlPager;
}
LinkButton getLinkButton( string lbId, string lbText, string lbCmdName, string lbCmdArg)
{
LinkButton lb = new LinkButton();
lb.ID = lbCmdName + lbId;
lb.Text = lbText;
lb.CommandName = lbCmdName;
lb.CommandArgument = lbCmdArg;
lb.Command += new CommandEventHandler(pageTurn);
return lb;
}
void pageTurn( object sender, CommandEventArgs e)
{
LinkButton lb = (LinkButton)sender;
int selectedPage = int.Parse(lb.CommandArgument);
int firstPage = selectedPage / pages * pages;
firstPage = (selectedPage % pages == 0) ? (firstPage - pages) : firstPage;
hidFirstPage.Value = firstPage.ToString();
dgBind(getSqlString(selectedPage));
pnlButtons.Controls.RemoveAt(pnlButtons.Controls.Count - 1);
pnlButtons.Controls.Add(getPager(firstPage));
lb = (LinkButton)pnlButtons.Controls[pnlButtons.Controls.Count - 1].FindControl("pgBtn" + selectedPage.ToString());
lb.Enabled = false;
}
void dgBind( string sqlStr)
{
OleDbDataAdapter da = new OleDbDataAdapter(sqlStr, conn);
DataTable dt = new DataTable();
conn.Open();
da.Fill(dt);
conn.Close();
da.Dispose();
dg.DataSource = dt;
dg.DataBind();
}
void dg_ItemDataBound( object sender, DataGridItemEventArgs e)
{
dg.Controls[0].EnableViewState = false;
}
<%
@ Import Namespace="System.Text"
%>
<% @ Import Namespace="System.Data.OleDb" %>
<% @ Import Namespace="System.Data" %>
<% @ Page Language="C#" %>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" >
< HTML >
< HEAD >
< TITLE > Dynamic Buttons </ TITLE >
< SCRIPT runat ="server" >
//插入上面的C#代码
</ SCRIPT >
< STYLE > BODY {}{ FONT-SIZE: 9pt; FONT-FAMILY: Tahoma,宋体; TEXT-ALIGN: center }
TD {}{ FONT-SIZE: 9pt; FONT-FAMILY: Tahoma,宋体; TEXT-ALIGN: center }
</ STYLE >
</ HEAD >
< BODY >
< FORM id ="form1" runat ="server" >
< DIV >
< ASP:LABEL id ="lblPrompt" runat ="server" text ="?" enableviewstate ="False" enabletheming ="True" ></ ASP:LABEL >
< BR >
< BR >
< BR >
< ASP:PANEL id ="pnlButtons" runat ="server" width ="560px" >
< INPUT id ="hidFirstPage" type ="hidden" value ="0" runat ="server" >< INPUT id ="hidPageCount" type ="hidden" runat ="server" >
< ASP:DATAGRID id ="dg" runat ="server" width ="100%" pagesize ="5" autogeneratecolumns ="False" bordercolor ="#CC9966"
borderstyle ="None" borderwidth ="1px" backcolor ="White" cellpadding ="4" onitemdatabound ="dg_ItemDataBound" >
< FOOTERSTYLE forecolor ="#330099" backcolor ="#FFFFCC" ></ FOOTERSTYLE >
< HEADERSTYLE font-bold ="True" forecolor ="#FFFFCC" backcolor ="#990000" ></ HEADERSTYLE >
< PAGERSTYLE horizontalalign ="Center" forecolor ="#330099" backcolor ="#FFFFCC" ></ PAGERSTYLE >
< SELECTEDITEMSTYLE font-bold ="True" forecolor ="#663399" backcolor ="#FFCC66" ></ SELECTEDITEMSTYLE >
< ITEMSTYLE forecolor ="#330099" backcolor ="White" ></ ITEMSTYLE >
< COLUMNS >
< ASP:BOUNDCOLUMN datafield ="产品ID" headertext ="产品ID" >
< HEADERSTYLE width ="60px" ></ HEADERSTYLE >
</ ASP:BOUNDCOLUMN >
< ASP:BOUNDCOLUMN datafield ="产品名称" headertext ="产品名称" ></ ASP:BOUNDCOLUMN >
< ASP:BOUNDCOLUMN datafield ="公司名称" headertext ="供应商" >
< HEADERSTYLE width ="80px" ></ HEADERSTYLE >
</ ASP:BOUNDCOLUMN >
< ASP:BOUNDCOLUMN datafield ="类别名称" headertext ="类别" >
< HEADERSTYLE width ="100px" ></ HEADERSTYLE >
</ ASP:BOUNDCOLUMN >
</ COLUMNS >
</ ASP:DATAGRID >
</ ASP:PANEL ></ DIV >
< BR >
< BR >
< BR >
< ASP:HYPERLINK id ="lnkReload" runat ="server" width ="80px" navigateurl ="Pager.aspx" enableviewstate ="False" > 重载 </ ASP:HYPERLINK >
</ FORM >
</ BODY >
</ HTML >
<% @ Import Namespace="System.Data.OleDb" %>
<% @ Import Namespace="System.Data" %>
<% @ Page Language="C#" %>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" >
< HTML >
< HEAD >
< TITLE > Dynamic Buttons </ TITLE >
< SCRIPT runat ="server" >
//插入上面的C#代码
</ SCRIPT >
< STYLE > BODY {}{ FONT-SIZE: 9pt; FONT-FAMILY: Tahoma,宋体; TEXT-ALIGN: center }
TD {}{ FONT-SIZE: 9pt; FONT-FAMILY: Tahoma,宋体; TEXT-ALIGN: center }
</ STYLE >
</ HEAD >
< BODY >
< FORM id ="form1" runat ="server" >
< DIV >
< ASP:LABEL id ="lblPrompt" runat ="server" text ="?" enableviewstate ="False" enabletheming ="True" ></ ASP:LABEL >
< BR >
< BR >
< BR >
< ASP:PANEL id ="pnlButtons" runat ="server" width ="560px" >
< INPUT id ="hidFirstPage" type ="hidden" value ="0" runat ="server" >< INPUT id ="hidPageCount" type ="hidden" runat ="server" >
< ASP:DATAGRID id ="dg" runat ="server" width ="100%" pagesize ="5" autogeneratecolumns ="False" bordercolor ="#CC9966"
borderstyle ="None" borderwidth ="1px" backcolor ="White" cellpadding ="4" onitemdatabound ="dg_ItemDataBound" >
< FOOTERSTYLE forecolor ="#330099" backcolor ="#FFFFCC" ></ FOOTERSTYLE >
< HEADERSTYLE font-bold ="True" forecolor ="#FFFFCC" backcolor ="#990000" ></ HEADERSTYLE >
< PAGERSTYLE horizontalalign ="Center" forecolor ="#330099" backcolor ="#FFFFCC" ></ PAGERSTYLE >
< SELECTEDITEMSTYLE font-bold ="True" forecolor ="#663399" backcolor ="#FFCC66" ></ SELECTEDITEMSTYLE >
< ITEMSTYLE forecolor ="#330099" backcolor ="White" ></ ITEMSTYLE >
< COLUMNS >
< ASP:BOUNDCOLUMN datafield ="产品ID" headertext ="产品ID" >
< HEADERSTYLE width ="60px" ></ HEADERSTYLE >
</ ASP:BOUNDCOLUMN >
< ASP:BOUNDCOLUMN datafield ="产品名称" headertext ="产品名称" ></ ASP:BOUNDCOLUMN >
< ASP:BOUNDCOLUMN datafield ="公司名称" headertext ="供应商" >
< HEADERSTYLE width ="80px" ></ HEADERSTYLE >
</ ASP:BOUNDCOLUMN >
< ASP:BOUNDCOLUMN datafield ="类别名称" headertext ="类别" >
< HEADERSTYLE width ="100px" ></ HEADERSTYLE >
</ ASP:BOUNDCOLUMN >
</ COLUMNS >
</ ASP:DATAGRID >
</ ASP:PANEL ></ DIV >
< BR >
< BR >
< BR >
< ASP:HYPERLINK id ="lnkReload" runat ="server" width ="80px" navigateurl ="Pager.aspx" enableviewstate ="False" > 重载 </ ASP:HYPERLINK >
</ FORM >
</ BODY >
</ HTML >