演示地址: 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; }<%@ 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>