方法一:
使用 PagedDataSource 對象和翻頁按鈕 LinkButton 。
Step 1: 初始化 PagedDataSource
Step 2: 設定 PagedDataSource 屬性
Step 3: 綁定 PagedDataSource 到 DataList
Step 4: 設定翻頁按鈕 LinkButton 事件 OnCommand ,使用 ViewState[“PageIndex”] 記錄目前頁号
Step 5: 編寫 OnCommand 關聯函數 IndexChanging().
Step 6: 設定 DataList 顯示資料,完成。
Source Code:
PageDataList.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="PagedDataList.aspx.cs" Inherits="PagedDataList" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DataList ID="DataList1" runat="server">
<HeaderTemplate>
<table>
<tr>
<td>Employee Id</td>
<td>Employee Name</td>
</tr>
</table>
</HeaderTemplate>
<ItemTemplate>
<table>
<tr>
<td><%# DataBinder.Eval(Container.DataItem,"EMPLOYEEID").ToString().Trim() %></td>
<td><%# DataBinder.Eval(Container.DataItem,"EMPLOYEENAME").ToString().Trim() %></td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
<table align="right" width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td> </td>
</tr>
<tr>
<td style="text-align: right" mce_style="text-align: right">
第<b><asp:Label ID="lblPageIndex" runat="server" Text=""></asp:Label></b>頁
共<b><asp:Label ID="lblPageCount" runat="server" Text=""></asp:Label></b>頁
<asp:LinkButton ID="btnFirst" runat="server" CausesValidation="False" CommandArgument="First"
OnCommand="IndexChanging"
Text="首頁"></asp:LinkButton>
<asp:LinkButton ID="btnPrev" runat="server" CausesValidation="False" CommandArgument="Prev"
OnCommand="IndexChanging"
Text="上一頁"></asp:LinkButton>
<asp:LinkButton ID="btnNext" runat="server" CausesValidation="False" CommandArgument="Next"
OnCommand="IndexChanging"
Text="下一頁"></asp:LinkButton>
<asp:LinkButton ID="btnLast" runat="server" CausesValidation="False" CommandArgument="Last"
OnCommand="IndexChanging"
Text="尾頁"></asp:LinkButton>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
********************************************************************************
PagedDataList.aspx.cs
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 partial class PagedDataList : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState["PageIndex"] = 0;
BindData();
}
}
private void BindData()
{
//擷取data source
DataSet oDs = GetEmployeeData();
//設定PagedDataSource
PagedDataSource pds = new PagedDataSource();
pds.DataSource = oDs.Tables[0].DefaultView;
pds.AllowPaging = true;
pds.PageSize = 4;
pds.CurrentPageIndex = int.Parse(ViewState["PageIndex"].ToString());
lblPageIndex.Text = String.Format("{0}",pds.CurrentPageIndex + 1);
lblPageCount.Text = pds.PageCount.ToString();
//設定翻頁按鈕是否可用
if (pds.CurrentPageIndex == 0)
{
btnFirst.Enabled = false;
btnPrev.Enabled = false;
}
else
{
btnFirst.Enabled = true;
btnPrev.Enabled = true;
}
if (pds.CurrentPageIndex == pds.PageCount - 1)
{
btnLast.Enabled = false;
btnNext.Enabled = false;
}
else
{
btnLast.Enabled = true;
btnNext.Enabled = true;
}
//綁定資料
DataList1.DataSource = pds;
DataList1.DataBind();
}
protected void IndexChanging(object sender, EventArgs e)
{
string strCommand = ((LinkButton)sender).CommandArgument.ToString();
int pageindex = int.Parse(ViewState["PageIndex"].ToString());
switch(strCommand)
{
case "First":
pageindex = 0;
break;
case "Prev":
if (pageindex > 0) pageindex--;
break;
case "Next":
if (pageindex < int.Parse(lblPageCount.Text) - 1) pageindex++;
break;
case "Last":
pageindex = int.Parse(lblPageCount.Text) - 1;
break;
}
ViewState["PageIndex"] = pageindex;
BindData();
}
private DataSet GetEmployeeData()
{
string conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
conStr += Server.MapPath("~/App_Data/demo.mdb");
System.Data.OleDb.OleDbConnection dbCon = new System.Data.OleDb.OleDbConnection(conStr);
dbCon.Open();
string sql;
sql = "SELECT * FROM Employee";
System.Data.OleDb.OleDbDataAdapter daSrc = new System.Data.OleDb.OleDbDataAdapter(sql, dbCon);
DataSet oDataSet = new DataSet();
daSrc.Fill(oDataSet);
return oDataSet;
}
}
******************************************************************************
******************************************************************************
方法二:
使用 PagedDataSource 對象和翻頁連結 Hyperlink 。
Step 1: 初始化 PagedDataSource
Step 2: 設定 PagedDataSource 屬性
Step 3: 綁定 PagedDataSource 到 DataList
Step 4: 設定翻頁連結 HyperLink ,使用 QueryString[“Page”] 傳遞目前頁号
Step 5: 設定 DataList 顯示資料,完成。
Source Code:
PageDataList1.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="PagedDataList1.aspx.cs" Inherits="PagedDataList1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DataList ID="DataList1" runat="server">
<HeaderTemplate>
<table>
<tr>
<td>Employee Id</td>
<td>Employee Name</td>
</tr>
</table>
</HeaderTemplate>
<ItemTemplate>
<table>
<tr>
<td><%# DataBinder.Eval(Container.DataItem,"EMPLOYEEID").ToString().Trim() %></td>
<td><%# DataBinder.Eval(Container.DataItem,"EMPLOYEENAME").ToString().Trim() %></td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
<table align="right" width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td> </td>
</tr>
<tr>
<td style="text-align:right" mce_style="text-align:right">
第<b><asp:Label ID="lblPageIndex" runat="server" Text=""></asp:Label></b>頁
共<b><asp:Label ID="lblPageCount" runat="server" Text=""></asp:Label></b>頁
<asp:HyperLink ID="lnkFirst" runat="server" >首頁</asp:HyperLink>
<asp:HyperLink ID="lnkPrev" runat="server" >上一頁</asp:HyperLink>
<asp:HyperLink ID="lnkNext" runat="server" >下一頁</asp:HyperLink>
<asp:HyperLink ID="lnkLast" runat="server" >尾頁</asp:HyperLink>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
********************************************************************************
PagedDataList1.aspx.cs
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 partial class PagedDataList1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindData();
}
}
private void BindData()
{
//擷取data source
DataSet oDs = GetEmployeeData();
//設定PagedDataSource
PagedDataSource pds = new PagedDataSource();
pds.DataSource = oDs.Tables[0].DefaultView;
pds.AllowPaging = true;
pds.PageSize = 4;
//設定翻頁連結
int nCurrentPage;
if (Request.QueryString["Page"] != null)
{
nCurrentPage = Convert.ToInt32(Request.QueryString["Page"]);
}
else
{
nCurrentPage = 1;
}
if (nCurrentPage < 1) nCurrentPage = 1;
if (nCurrentPage > pds.PageCount) nCurrentPage = pds.PageCount;
pds.CurrentPageIndex = nCurrentPage - 1;
lblPageCount.Text = pds.PageCount.ToString();
lblPageIndex.Text = String.Format("{0}", pds.CurrentPageIndex + 1);
if (!pds.IsFirstPage)
{
lnkPrev.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToInt32(nCurrentPage - 1);
lnkFirst.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=1";
}
else
{
lnkPrev.NavigateUrl = "";
lnkFirst.NavigateUrl = "";
}
if (!pds.IsLastPage)
{
lnkNext.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToInt32(nCurrentPage + 1);
lnkLast.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + pds.PageCount;
}
else
{
lnkNext.NavigateUrl = "";
lnkLast.NavigateUrl = "";
}
//綁定資料
DataList1.DataSource = pds;
DataList1.DataBind();
}
private DataSet GetEmployeeData()
{
string conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
conStr += Server.MapPath("~/App_Data/demo.mdb");
System.Data.OleDb.OleDbConnection dbCon = new System.Data.OleDb.OleDbConnection(conStr);
dbCon.Open();
string sql;
sql = "SELECT * FROM Employee";
System.Data.OleDb.OleDbDataAdapter daSrc = new System.Data.OleDb.OleDbDataAdapter(sql, dbCon);
DataSet oDataSet = new DataSet();
daSrc.Fill(oDataSet);
return oDataSet;
}
}
******************************************************************************
******************************************************************************
方法三:
按頁碼和頁面行數擷取資料源和使用翻頁按鈕 LinkButton 。
Step 1: 擷取資料源記錄數
Step 2: 設定顯示頁面行數 , 計算出頁碼
Step 3: 根據頁碼和目前頁擷取資料并綁定到 DataList
Step 4: 設定翻頁按鈕 LinkButton 事件 OnCommand ,使用 ViewState[“PageIndex”] 記錄目前頁号
Step 5: 編寫 OnCommand 關聯函數 IndexChanging().
Step 6: 設定 DataList 顯示資料,完成。
Source Code:
PageDataList2.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="PagedDataList2.aspx.cs" Inherits="PagedDataList2" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DataList ID="DataList1" runat="server">
<HeaderTemplate>
<table>
<tr>
<td>Employee Id</td>
<td>Employee Name</td>
</tr>
</table>
</HeaderTemplate>
<ItemTemplate>
<table>
<tr>
<td><%# DataBinder.Eval(Container.DataItem,"EMPLOYEEID").ToString().Trim() %></td>
<td><%# DataBinder.Eval(Container.DataItem,"EMPLOYEENAME").ToString().Trim() %></td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
<table align="right" width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td> </td>
</tr>
<tr>
<td style="text-align:right" mce_style="text-align:right">
第<b><asp:Label ID="lblPageIndex" runat="server" Text=""></asp:Label></b>頁
共<b><asp:Label ID="lblPageCount" runat="server" Text=""></asp:Label></b>頁
<asp:LinkButton ID="btnFirst" runat="server" CausesValidation="False" CommandArgument="First"
OnCommand="IndexChanging"
Text="首頁"></asp:LinkButton>
<asp:LinkButton ID="btnPrev" runat="server" CausesValidation="False" CommandArgument="Prev"
OnCommand="IndexChanging"
Text="上一頁"></asp:LinkButton>
<asp:LinkButton ID="btnNext" runat="server" CausesValidation="False" CommandArgument="Next"
OnCommand="IndexChanging"
Text="下一頁"></asp:LinkButton>
<asp:LinkButton ID="btnLast" runat="server" CausesValidation="False" CommandArgument="Last"
OnCommand="IndexChanging"
Text="尾頁"></asp:LinkButton>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
********************************************************************************
PagedDataList2.aspx.cs
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;
using System.Data.OleDb;
public partial class PagedDataList2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState["PageIndex"] = 0;
BindData();
}
}
private void BindData()
{
//設定頁面行數
int PageSize = 4;
//計算總共有多少記錄
int RecordCount = CalculateRecord();
//計算總共有多少頁
int PageCount;
if (RecordCount % PageSize != 0)
{
PageCount = RecordCount / PageSize + 1;
}
else
{
PageCount = RecordCount / PageSize;
}
lblPageCount.Text = PageCount.ToString();
//擷取目前頁碼
int CurrentPage = int.Parse(ViewState["PageIndex"].ToString());
//根據目前頁碼擷取資料并綁定
DataList1.DataSource = CreateSource(CurrentPage, PageSize);
DataList1.DataBind();
//設定翻頁按鈕
btnNext.Enabled = true;
btnPrev.Enabled = true;
if (CurrentPage == (PageCount - 1))
{
btnNext.Enabled = false;
btnLast.Enabled = false;
}
else
{
btnNext.Enabled = true;
btnLast.Enabled = true;
}
if (CurrentPage == 0)
{
btnPrev.Enabled = false;
btnFirst.Enabled = false;
}
else
{
btnPrev.Enabled = true;
btnFirst.Enabled = true;
}
lblPageIndex.Text = (CurrentPage + 1).ToString();
}
protected void IndexChanging(object sender, EventArgs e)
{
string strCommand = ((LinkButton)sender).CommandArgument.ToString();
int pageindex = int.Parse(ViewState["PageIndex"].ToString());
switch (strCommand)
{
case "First":
pageindex = 0;
break;
case "Prev":
if(pageindex > 0) pageindex--;
break;
case "Next":
if(pageindex < int.Parse(lblPageCount.Text) - 1) pageindex++;
break;
case "Last":
pageindex = int.Parse(lblPageCount.Text) - 1;
break;
}
ViewState["PageIndex"] = pageindex;
BindData();
}
private DataSet GetEmployeeData()
{
string conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
conStr += Server.MapPath("~/App_Data/demo.mdb");
System.Data.OleDb.OleDbConnection dbCon = new System.Data.OleDb.OleDbConnection(conStr);
dbCon.Open();
string sql;
sql = "SELECT * FROM Employee";
System.Data.OleDb.OleDbDataAdapter daSrc = new System.Data.OleDb.OleDbDataAdapter(sql, dbCon);
DataSet oDataSet = new DataSet();
daSrc.Fill(oDataSet);
return oDataSet;
}
//計算總共有多少條記錄
public int CalculateRecord()
{
string conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
conStr += Server.MapPath("~/App_Data/demo.mdb");
System.Data.OleDb.OleDbConnection dbCon = new System.Data.OleDb.OleDbConnection(conStr);
dbCon.Open();
string sql;
int intCount = 0;
sql = "SELECT COUNT(*) AS CNT FROM Employee";
OleDbCommand MyComm = new OleDbCommand(sql,dbCon);
OleDbDataReader dr = MyComm.ExecuteReader();
if (dr.Read())
{
intCount = Int32.Parse(dr["CNT"].ToString());
}
else
{
intCount = 0;
}
dr.Close();
return intCount;
}
//根據頁碼和頁面大小擷取資料
ICollection CreateSource(int nPageIndex, int nPageSize)
{
int StartIndex;
int PageSize;
//設定導入的起終位址
StartIndex = nPageIndex * nPageSize;
PageSize = nPageSize;
DataSet ds = new DataSet();
string conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
conStr += Server.MapPath("~/App_Data/demo.mdb");
System.Data.OleDb.OleDbConnection dbCon = new System.Data.OleDb.OleDbConnection(conStr);
dbCon.Open();
string sql;
sql = "SELECT * FROM Employee";
OleDbDataAdapter MyAdapter = new OleDbDataAdapter(sql, dbCon);
MyAdapter.Fill(ds, StartIndex, PageSize, "Employee");
return ds.Tables["Employee"].DefaultView;
}
}
******************************************************************************
******************************************************************************
推薦使用 1 和 3