天天看點

ASP.NET 2.0 DataList的分頁

方法一:

使用 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