您的位置:首页 > 编程语言 > ASP

ASP.NET 2.0 DataList的分页

2010-12-07 14:42 357 查看
方法一:



使用
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: