实现DataList控件的分页

分页|控件

DataList控件功能很强大,他支持选择、编辑,实现的方法也很简单,不过最令人头疼的就是它不像DataGrid控件一样内置了分页的功能,这么好的一个控件竟然不能分页!!!确实是一个很让人头疼的事情。
  不过,只是DataList没有提供内置的分页功能,但是并不表示,我们不能使用DataList控件来实现分页,既然它不给我分页功能,那只好自己动手了。
  下面是全部原代码,其实用到的方法和PHP中的分页差不多,只是这里用的是DataAdapter与DataSet组合,而不是PHP中的SQL语句直接搞定。

default.aspx文件:
<%@ Page language="c#" Codebehind="default.aspx.cs" AutoEventWireup="false" Inherits="guestbook._default" %>
<HTML>
<HEAD>
<title>中国BS网留言簿</title>
<HTML>
<HEAD>
<title>DataList分页</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form method="post" action="default.aspx" runat="server" ID="Form1">
<table width="100%" border="0" cellpadding="2" cellspacing="0" align="center">
<tr>
<td align="middle">
<asp:DataList ID="Myguest" RepeatColumns="1" Runat="server">
<ItemTemplate>
<table class="gueststyleline" border="0" cellpadding="0" cellspacing="1" align="center" width="610">
<tr>
<td>
<table class="gueststyleline" border="0" cellpadding="0" cellspacing="1" align="center" width="610">
<tr>
<td>
<table width="100%" border="0" cellpadding="6" cellspacing="0" class="gueststylebg" align="center">
<tr>
<td width="112" align="center" height="153" valign="top">
<table width="100%" border="0" cellspacing="0" cellpadding="0" height="100%" class="gueststylebg">
<tr>
<td>
<table border="0" cellspacing="0" cellpadding="0" align="center" height="25">
<tr>
<td class="FILTER">
<div align="center"><font style="LEFT: 0px; WIDTH: 100%; WORD-WRAP: break-word; 130; 0pt"><%# DataBinder.Eval(Container.DataItem,"name") %></font></div>
</td>
</tr>
</table>
<div align="center"><font style="LEFT: 0px; WIDTH: 100%; WORD-WRAP: break-word; 130; 0pt"><img src="<%# DataBinder.Eval(Container.DataItem,"face") %>" width="80" height="90" align="middle"></font><br>
<br>

<%# DataBinder.Eval(Container.DataItem,"sex") %>
★</div>
</td>
</tr>
</table>
</td>
<td align="center" height="153" width="2">
<table class="gueststyleline" width="1" height="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="1"></td>
</tr>
</table>
</td>
<td height="33" valign="top" width="463">
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="gueststylebg" style="TABLE-LAYOUT: fixed" height="20">
<tr>
<td height="14" width="310"><img src="http://www.163design.net/n/i/images/icon/subject.gif" width="15" height="15" alt="主题">:<%# DataBinder.Eval(Container.DataItem,"caption") %><br>
</td>
<td width="151" height="14"><font style="0pt">  <img src="http://www.163design.net/n/i/images/icon/posttime.gif" width="16" height="15" alt="发表时间[北京时间]">:<%# DataBinder.Eval(Container.DataItem,"postdate") %></font></td>
</tr>
</table>
<hr class="gueststylehr" size="0.1" width="100%">
<table width="100%" border="0" cellpadding="5" cellspacing="0" class="gueststylebg" height="45%" style="TABLE-LAYOUT: fixed">
<tr>
<td valign="top" width="28" align="center"><img src="http://www.163design.net/n/i/images/emot/1.gif" width="16" height="16">
</td>
<td valign="top" width="94%" style="LEFT: 0px; WIDTH: 100%; WORD-WRAP: break-word; 130; 0pt">
<%# DataBinder.Eval(Container.DataItem,"content") %>
</td>
</tr>
</table>
<table width="100%" border="0" cellpadding="4" cellspacing="0">
<tr>
<td valign="top">
<hr class="gueststylehr" size="0.1" width="100%">
<a href="<%# DataBinder.Eval(Container.DataItem,"homepage") %>" target="_blank"><img src="http://www.163design.net/n/i/images/icon/home.gif" width="44" height="16"  border="0"></a> 
<a href="http://www.chinagz.net/ip/ipsearch.cgi?ip=<%# DataBinder.Eval(Container.DataItem,"ip") %>" target="_blank"><img src="http://www.163design.net/n/i/images/icon/ip.gif" align="absmiddle" height="16" border="0"></a> 
<a href="http://search.tencent.com/cgi-bin/friend/user_show_info?ln=<%# DataBinder.Eval(Container.DataItem,"qq") %>" target="_blank">
<img src="http://www.163design.net/n/i/images/icon/qq.gif" border="0" width="35" height="16"></a> 
<a href="mailto:<%# DataBinder.Eval(Container.DataItem,"email") %>"><img src="http://www.163design.net/n/i/images/icon/email.gif" width="42" height="16" border="0" alt=""></a> 
<a href="javascript:;" admin","","hide","postcontent","","show")">
<img src="http://www.163design.net/n/i/images/icon/postguest.gif" width="45" height="16" border="0"></a>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
<BR>
</td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2" align="center" height="9">
<TBODY>
<tr>
<td align="middle">
<table class="gueststyleline" width="610" border="0" cellpadding="1" cellspacing="0" height="18">
<tr>
<td height="24">
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="gueststylebg" height="18">
<tr>
<td width="35%" align="middle" height="36">
共有<asp:Label id="lblRecordCount" ForeColor="red" runat="server" />条记录  当前为<asp:Label id="lblCurrentPage" ForeColor="red" runat="server" />/<asp:Label id="lblPageCount" ForeColor="red" runat="server" />页
</td>
<td align="middle" height="36">
<asp:LinkButton id="lbnPrevPage" Text="上一页" CommandName="prev" runat="server" />
<asp:LinkButton id="lbnNextPage" Text="下一页" CommandName="next" runat="server" />
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</TBODY>
</table>
</form>
</body>
</HTML>

注意:必须把两个LinkButton控件的Command事件改为Page_OnClick:

codebehind文件:
private void Page_Load(object sender, System.EventArgs e)
{
PageSize=1;
Conn= new SqlConnection(Application["Guest_Conn"].ToString());
Conn.Open();
if(!Page.IsPostBack)
{
  ListBind();
  CurrentPage = 0;
  ViewState["PageIndex"] = 0;
  //计算总共有多少记录
  RecordCount = CalculateRecord();
  lblRecordCount.Text = RecordCount.ToString();
  //计算总共有多少页
  PageCount = RecordCount/PageSize;
  lblPageCount.Text = PageCount.ToString();
  ViewState["PageCount"] = PageCount;
}
}

//计算总共有多少条记录
public int CalculateRecord()
{
int intCount;
string strCount = "select count(*) as co from guest";
SqlCommand MyComm = new SqlCommand (strCount,Conn);
SqlDataReader dr = MyComm.ExecuteReader();
if(dr.Read())
{
   intCount = Int32.Parse(dr["co"].ToString());
}
else
{
   intCount = 0;
}
dr.Close();
return intCount;
}

ICollection CreateSource()
{
int StartIndex;
//设定导入的起终地址
StartIndex = CurrentPage*PageSize;
string strSel = "Select * from guest order by postdate desc";
DataSet ds = new DataSet();
SqlDataAdapter MyAdapter = new SqlDataAdapter(strSel,Conn);
MyAdapter.Fill(ds,StartIndex,PageSize,"guest");
return ds.Tables["guest"].DefaultView;
}

public void ListBind()
{
Myguest.DataSource = CreateSource();
Myguest.DataBind();
lbnNextPage.Enabled = true;
lbnPrevPage.Enabled = true;
if(CurrentPage==(PageCount-1)) lbnNextPage.Enabled = false;
if(CurrentPage==0) lbnPrevPage.Enabled = false;
lblCurrentPage.Text = (CurrentPage+1).ToString();
}

public void Page_OnClick(Object sender,CommandEventArgs e)
{
CurrentPage = (int)ViewState["PageIndex"];
PageCount = (int)ViewState["PageCount"];
string cmd = e.CommandName;
//判断cmd,以判定翻页方向
switch(cmd)
{
  case "next":
   if(CurrentPage<(PageCount-1)) CurrentPage++;
   break;
  case "prev":
   if(CurrentPage>0) CurrentPage--;
   break;
}
ViewState["PageIndex"] = CurrentPage;
ListBind();
}

时间: 2025-01-19 07:03:22

实现DataList控件的分页的相关文章

asp.net Datalist控件实现分页功能_实用技巧

在.aspx页面里的代码 复制代码 代码如下: <asp:DataList ID="DataList1" runat="server" Width="976px" Height="745px" BorderWidth="2px" CellPadding="2" CellSpacing="2" RepeatColumns="7" RepeatD

asp.net中将数据库绑定到DataList控件的实现方法与实例代码

解决方法1: datalist databind() 解决方法2: 查看MSDN上的详细说明资料 解决方法3: 在DataList的模板中用table表格,如: 复制代码 代码如下: <asp:DataList ID="dlDetailedInfo" runat="server" OnItemDataBound="dlDetailedInfo_ItemDataBound" Width="100%"> <Ite

asp.net中数据库绑定到DataList控件操作方法

我现在要做这个页面,然后我用DataList控件显示题目,我想问如何把我数据库教程的题目绑定到DataList控件里面,然后让它显示考试题目? 解决方法1: datalist databind() 解决方法2: 查看MSDN上的详细说明资料 解决方法3: 在DataList的模板中用table表格,如:<asp教程:DataList ID="dlDetailedInfo" runat="server" OnItemDataBound="dlDetai

C#.net下DataList控件使用

问题描述 最近在学习C#.net,有谁能给我提供比较完整的DataList控件实现分页,添加删除,等功能的代码呢?谢谢! 解决方案 解决方案二:网上搜

asp.net中将数据库绑定到DataList控件的实现方法与实例代码_实用技巧

解决方法1: datalist databind() 解决方法2: 查看MSDN上的详细说明资料 解决方法3: 在DataList的模板中用table表格,如: 复制代码 代码如下: <asp:DataList ID="dlDetailedInfo" runat="server" OnItemDataBound="dlDetailedInfo_ItemDataBound" Width="100%"> <Ite

使用PagedDataSource类实现DataList和Repeater控件的分页显示

分页|控件|显示     Asp.net提供了三个功能强大的列表控件:DataGrid.DataList和Repeater控件,但其中只有DataGrid控件提供分页功能.相对DataGrid,DataList和Repeater控件具有更高的样式自定义性,所以很多时候我们喜欢使用DataList或Repeater控件来显示数据.  实现DataList或Repeater控件的分页显示有几种方法:  1.写一个方法或存储过程,根据传入的页数返回需要显示的数据表(DataTable)  2.使用Pa

DataList控件也玩分页 (转自aspcn.com)

分页|控件 众所周知,ASP.Net中给我们提供了三个数据控件--DataGrid,Repeater,DataList.在这三个控件中,DataGrid控件的功能最强大,Repeater控件最忠实于模版原样,DataList控件则兼而有之. DataGrid控件太有名了,所以以前用的讲的也很多,Repeater功能太少,没有什么好讲的.这里主要是讲一讲DataList控件. DataList控件其实功能也很强大,他支持选择.编辑,实现的方法也很简单,不过最令人头疼的就是它不像DataGrid控件

ASP.NET:DataGrid控件的分页功能

asp.net|datagrid|datagrid控件|分页 DataGrid 控件是一个基于模板样式的.多功能的.多列的数据绑定控件.在三个数据绑定控件中,DataGrid是功能最为强大的,其次时DataList控件,然后是轻量级的数据绑定控件Repeater.要自定义 DataGrid 中各列的布局,您可以将列类型设置为"模板",然后修改列的模板.DataGrid 控件也可以无需模板,只需按照默认的设置即可进行呈现,这使得该控件成了用于报告方案的理想控件.      我们可以把Da

ASP.NET:DataList控件的选择输入功能

asp.net|控件     利用DataList控件的<SelectedItemTemplate> 属性,就可以随心所欲的布置表中的数据.根据链接,友好地显示出用户感兴趣的数据,我们来看下面的实例.     9.3.2 DataList控件的选择输入功能     在DataCon Web 项目里添加一个Web 窗体,命名为DataList_Sample2.aspx,添加一个DataList控件,DataList_Sample2.aspx的主要HTML代码如下: <form id=&qu