实现DataList控件的分页

原创 2006年05月18日 18:04:00

实现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="images/icon/subject.gif" width="15" height="15" alt="主题">:<%# DataBinder.Eval(Container.DataItem,"caption") %><br>
</td>
<td width="151" height="14"><font style="0pt"> &nbsp;<img src="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="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="images/icon/home.gif" width="44" height="16"  border="0"></a>&nbsp;
<a href="http://www.chinagz.net/ip/ipsearch.cgi?ip=<%# DataBinder.Eval(Container.DataItem,"ip") %>" target="_blank"><img src="images/icon/ip.gif" align="absmiddle" height="16" border="0"></a>&nbsp;
<a href="http://search.tencent.com/cgi-bin/friend/user_show_info?ln=<%# DataBinder.Eval(Container.DataItem,"qq") %>" target="_blank">
<img src="images/icon/qq.gif" border="0" width="35" height="16"></a>&nbsp;
<a href="mailto:<%# DataBinder.Eval(Container.DataItem,"email") %>"><img src="images/icon/email.gif" width="42" height="16" border="0" alt=""></a>&nbsp;
<a href="javascript:;" onClick="MM_showHideLayers("admin","","hide","postcontent","","show")">
<img src="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" />条记录&nbsp; 当前为<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();
}

使用DataList控件绑定数据并实现分页

DataList控件是一种数据绑定控件,下面来介绍一下它与绑定有关的三个属性:     DataKeyField:获取或设置由DataSource属性指定的数据源中的键字段;    DataKeys...
  • SmallXianNotImmortal
  • SmallXianNotImmortal
  • 2016年02月16日 10:03
  • 409

【Asp.net之旅】--数据绑定控件之DataList

       上篇博客讨论了Repeater控件的基本用法,它是最基本的数据绑定控件,只提供了数据绑定的功能,熟练运用Repeater控件后,其它类似的数据绑定控件就很简单了。接着我们上篇博客的内...
  • zhang_xinxiu
  • zhang_xinxiu
  • 2014年03月28日 09:28
  • 24395

Datalist控件的详细用法(一)

使用DataList控件   本章内容:          1、理解事件冒泡          2、使用模板          3、在DataList中显示数据          4、在Dat...
  • liuwei1128
  • liuwei1128
  • 2014年03月14日 21:34
  • 3094

粗略区分Gridview,repeater,datelist数据控件的差异

比较GridView Repeater DataList三种绑定控件、从灵活性和执行效率上综合考虑,Repeater当属第一。gridview功能最强大,但是对待嵌套绑定问题、疑难杂症,还是用Data...
  • jintougao
  • jintougao
  • 2014年01月24日 10:04
  • 1371

DataList控件分页

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We...
  • Heavy_Dream
  • Heavy_Dream
  • 2016年12月01日 13:27
  • 207

分页和二级联动

建一个动态Web工程和三张表: 表一:t_employee 字段:e_id,e_name,e_birthday,e_job 以下为二级联动所需的表 表二:t_city 字段:id,cityN...
  • Java1029384756
  • Java1029384756
  • 2016年11月07日 22:32
  • 457

《ASP.NET》数据绑定—DataList实践篇

上篇文章大概讲了DataList的一些基础知识,掌握这些知识在将来的应用中起到很大的作用,现在我们就开始讲上篇文章中说的基础知识做一个小例子。     首先,我机子的数据库中有一张person表,如下...
  • u013067402
  • u013067402
  • 2015年07月26日 11:12
  • 1742

数据列表DataList模板之实例

1,数据列表DataList与重复列表Repeator很类似,但是DataList应用更广泛,因为他可以选择和修改数据项的内容。 DataList的数据显示和布局与Repeator控件一样都是通过“模...
  • hanxuemin12345
  • hanxuemin12345
  • 2013年05月26日 21:00
  • 4307

Datalist的分页

@ Page Language="C#" AutoEventWireup="true" CodeFile="datalist.aspx.cs" Inherits="第二章_datalist"  Deb...
  • wfh_fighting
  • wfh_fighting
  • 2016年10月20日 16:00
  • 89

【原创】两种分页控件的实现

两种分页控件的实现 最近因项目需要,封装了两个分页控件。两个分页控件的工作机制相同,只是界面风格不同。现在拿来和大家分享一下。如果大家有什么好的意见和建议,欢迎指正。 分页控件采用UserCo...
  • s_521_h
  • s_521_h
  • 2014年12月11日 09:51
  • 1183
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实现DataList控件的分页
举报原因:
原因补充:

(最多只允许输入30个字)