Repeater的分页
ok了。研究了一个上午,终于写出了自己的实验代码。成功通过了。当然,成功离不开网上的兄弟。点此处查看参考资料!
这位兄弟的可能用asp.net 1.x开发的,所以代码在放入编辑器中还需要修改一下才能运行。谢过了。
Repeater分页,需要依靠PagedDataSource。这个类存在于System.Web.UI.WebControls命名空间。它的作用是作为数据源与数据显示控件的中间介质。如:
数据源->PagedDataSource->数据绑定控件
之间的关系通过以下代码来实现:
PagedDataSource pds=new PagedDataSource ();
pds.DataSource=dataTable;
repeater1.DataSource=pds;
repeater1.DataBind();
三者之间发生关系的代码就是这些。
那么PagedDataSource又是怎样工作的呢?MSDN上面也没有讲。这仅仅是我的推断。
PagedDataSource封装了从底层数据源(如:DataTable)中取出第几页数据的中间过程。我们只需设置
PagedDataSource .AllowPaging=true;
PagedDataSource .PageSize=xx;
PagedDataSource.CurrentPageIndex=currentPage;
就可以取出指定页的数据,而数据绑定控件将从PagedDataSource 中获取这些数据以显示。PagedDataSource 在这里成一个中介。而数据绑定组件如何取数据,PagedDataSource 是如何分页,并取出对应的数据,这个是asp.net框架内部实现,对我们完全透明。
另一个需要着重讲的是,PagedDataSource 中页号是从0开始的,并不是从1开始。我的示例代码如下:
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 Buddha.Utils;
using System.Data.Common;
public partial class Repeater : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
PagedDataSource pds = new PagedDataSource();
pds.DataSource = CreateDataSource().DefaultView;
//pds.AllowCustomPaging = true;
pds.AllowPaging = true;
//pds.AllowServerPaging = true;
pds.PageSize = 3;
int currentPage=Convert.ToInt32(Request["page"]);
//设当前页
pds.CurrentPageIndex = currentPage;
//设几个超链接
if (!pds.IsFirstPage)
{
lnkUp.NavigateUrl = Request.CurrentExecutionFilePath + "?page=" + (currentPage - 1);
}
if (!pds.IsLastPage)
{
lnkDown.NavigateUrl = Request.CurrentExecutionFilePath + "?page=" + (currentPage + 1);
}
lbl_info.Text = "第" + (currentPage+1) + "页、共" + pds.PageCount + "页";
Repeater1.DataSource = pds;
Repeater1.DataBind();
}
/// <summary>
/// 创建数据源
/// </summary>
/// <returns></returns>
private DataTable CreateDataSource()
{
DataBase db = AppCommon.DefaultDataBase;
DataTable dt = db.GetDataTable("select id,txt2,txt3,txt4,txt5,txt6 from tbmain1");
db.Dispose();
return dt;
}
aspx中的代码如下:
<%@ Page Language="C#" CodeFile="Repeater.aspx.cs" Inherits="Repeater" %>
<!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>Repeater实验室</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:HyperLink ID="lnkUp" runat="server">上一页</asp:HyperLink>
<asp:HyperLink ID="lnkDown" runat="server">下一页</asp:HyperLink>
<asp:Label ID="lbl_info" runat="server" Text="当前第x页,共x页"></asp:Label><br />
<table>
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<tr><td>项目名称:</td><td><%# eval_r("txt2") %></td></tr>
<tr><td>承担单位:</td><td><%# eval_r("txt3") %></td></tr>
<tr><td>计划类别:</td><td><%# eval_r("txt4") %></td></tr>
<tr><td>技术领域:</td><td><%# eval_r("txt5") %></td></tr>
<tr><td colspan="2"><hr /></td></tr>
</ItemTemplate>
</asp:Repeater>
</table>
</div>
</form>
</body>
</html>
呵呵,我写的代码都是蛮清爽的,一看就明白的那种。后来我又查到一份代码,也是用PagedDataSource实现,不过,它用的是LinkButton来导航,结果使得代码复杂了不少。因为要为按钮事件编写代码。远不如用HyperLinker来得爽快。
另外,我这段分页代码最优秀的地方是:
一、不用判断Request.QueryString["page"]是否为null了。直接一个转型,什么都不用判断;
二、使用IsFirstPage、IsLastPage来判断是否第一页、最后一页
三、取DataTable的代码实在优美、简约到极点了。底层封装得好啊。
四、使用HyperLinker而不用LinkButton来导航。
MSDN上说:PagedDataSource 类封装那些允许数据源控件(如 DataGrid、GridView、DetailsView 和FormView)执行分页操作的属性。如果控件开发人员需对自定义数据绑定控件提供分页支持,即可使用此类。可见,如果有一天,要把数据绑定控件绑定到DataTable之类的数据源上,那么就需要用PagedDataSource来手工分页了。
今天收获很大,终于搞清了手工分页的问题。
刚才搞了一下DataList,这个东西也没什么好研究的。一笔带过了。不过,DataList有个布局方式的设置,它还可以采用多列的方式。就这点特殊之处了。msdn上面写了十来章的内容专讲它。
Repeater的分页的更多相关文章
- ASP.NET WebForm 通过 PagedDataSource 实现 Repeater 的分页
1.效果图&代码说明 1.效果图 2.代码说明 1.翻页按钮 前台两个LinkButton(上一页.下一页),设置不同的CommandName.CommandArg ...
- 使用公共的存储过程实现repeater的分页
当一个项目repeater分页多的时候使用公共的存储过程实现分页,是不错的选择 ALTER PROC [dbo].[P_Common_proc] -- 通用分页存储过程 @TableName varc ...
- asp.net动态网站repeater控件使用及分页操作介绍
asp.net动态网站repeater控件使用及分页操作介绍 1.简单介绍 Repeater 控件是一个容器控件,可用于从网页的任何可用数据中创建自定义列表.Repeater 控件没有自己内置的呈现功 ...
- cPage分页详细介绍
asp.net中各种数据控件,datalist.gridview.Repeater等分页是最常用的功能,几乎任何一个B/S项目,无论是系统还是网站都会用到.分页时,读取整个数据,直接绑定到控件,都可以 ...
- Repeater+AspNetPager+Ajax留言板
最近想要巩固下基础知识,于是写了一个比较简单易懂实用的留言板. 部分样式参考了CSDN(貌似最近一直很火),部分源码参照了Alexis. 主要结构: 1.前期准备 2.Repeater+AspNetP ...
- Repeater的使用
1.页面代码 如果要分页,那么页面开头必须写(<%@ Register Src="~/Controls/Page.ascx" TagName="Page" ...
- 【转】ASP.NET常用数据绑定控件优劣总结
转自:http://www.cnblogs.com/Olive116/archive/2012/10/24/2736570.html ASP.NET常用数据绑定控件优劣总结 本文的初衷在于对Asp ...
- ASP.NET常用数据绑定控件优劣总结
本文的初衷在于对Asp.net常用数据绑定控件进行一个概览性的总结,主要分析各种数据绑定控件各自的优缺点,以便在实际的开发中选用合适的控件进行数据绑定,以提高开发效率. 因为这些数据绑定控件大部分都已 ...
- Farseer.net轻量级开源框架 中级篇:数据绑定
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: DbFactory数据工厂 下一篇:Farseer.net轻量级开源框架 中级篇: ...
随机推荐
- pycharm配置字体问题
A scheme with this name already exists or was deleted without applying the changes 解决办法:$cd ~/.PyCha ...
- OC推箱子
#include<stdio.h> #include<stdlib.h> int main(void) { char sr;//存储用户输入的指令 //绘制地图 char a[ ...
- 2016年6月20日 JAVA知识框架
基于 J2EE 列举的知识架构,大体列举开发基础知识.帮助我随时查缺补漏,奉行好记性不如烂笔头.写了这该随笔,以便后续查询. 1 JAVA简介 2 JAVA编程环境 3 JAVA基本编程结构 4 ...
- IIS配置域用户自动登录
1.首先确定IIS所在计算机是否已添加到域中:右击计算机->属性,在计算机名称,域,工作组设置中可看到计算机所在的域,若没有,可点击更改设置,再点击更改,选择要绑定的域即可(需要用域账户登录). ...
- 自己搭建了一个简单实用的Web版记事本
演示播放地址:http://v.youku.com/v_show/id_XMTg0MjY2OTAxNg==.html 技术说明 环境 vs2012开发 sql2008r2数据库 技术 C#基础语言 M ...
- RedHat Enterprise Linux 6.4 使用 Centos 6 的yum(转)
概述 redhat的yum源需注册付费,费时费力,整理RedHat yum 安装CentOS的方法. 安装系统文件 系统:RedHat Enterprise Linux 6.4-x86_64 md5: ...
- GTest Google的一种白盒单元测试框架 开源项目
GTest为google开源的白盒单元测试跨平台测试框架,含丰富的断言.类型参数化测试.死亡测试.以及其他的测试选项设置.文件保存等,以下将对该项目C++的实现进行简要的分析,作为学习记录备份. 基本 ...
- HTML5教程之html 5 本地数据库(Web Sql Database)
HTML5的Web SQL Databases(html5 本地数据库)的确很诱惑人,当你发现可以用与mysql查询一样的查询语句来操作本地数据库时,你会发现这东西挺有趣的.今天,我们一起来了解HTM ...
- 使用Solr索引MySQL数据
环境搭建 1.到apache下载solr,地址:http://mirrors.hust.edu.cn/apache/lucene/solr/ 2.解压到某个目录 3.cd into D:\Solr\s ...
- swift 单独部署,开发
部署环境 virtualBox Ubuntu 14.04 desktop OpenStack Swift (kilo) 说明 此文档为基于官方修改的只针对Ubuntu 14.04,完整的参阅官方文档 ...