|
|
Eric的数据分页(演示+代码) |
|
|
作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站 |
演示地址: 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>
 
|
|
相关文章:相关软件: |
|