博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[译文]扩展Repeater控件以支持DataPager分页
阅读量:7046 次
发布时间:2019-06-28

本文共 4391 字,大约阅读时间需要 14 分钟。

概述

在网上看到不少的这方面的例子,使Repeater控件象ListView控件一样支持DataPager分页。但是我试了不少,都失败了。所以我就花点时间来自己写了一个。下面是我的解决方案。

代码介绍

首先,我们建立一个用户控件,取名DataPagerRepeater。使其继承自Repeater 并引用System.Web.UI.WebControls.IPageableItemContainer 命名空间。(同时添加System.Web.Extensions引用)并输入以下代码

[ToolboxData("<{0}:DataPagerRepeater runat="server"    PersistentDataSource=true>
")]public class DataPagerRepeater : Repeater, System.Web.UI.WebControls.IPageableItemContainer, INamingContainer{ public int MaximumRows { get { return ViewState["_maximumRows"] != null ? (int)ViewState["_maximumRows"] : -1; } } public int StartRowIndex { get { return ViewState["_startRowIndex"] != null ? (int)ViewState["_startRowIndex"] : -1; } } public int TotalRows { get { return ViewState["_totalRows"] != null ? (int)ViewState["_totalRows"] : -1; } } public bool PersistentDataSource { get { return ViewState["PersistentDataSource"] != null ? (bool)ViewState["PersistentDataSource"] : true; } set { ViewState["PersistentDataSource"] = value; } } protected override void LoadViewState(object savedState) { base.LoadViewState(savedState); if (Page.IsPostBack) { if (PersistentDataSource && ViewState["DataSource"] != null) { this.DataSource = ViewState["DataSource"]; this.DataBind(); } } } public void SetPageProperties(int startRowIndex, int maximumRows, bool databind) { ViewState["_startRowIndex"] = startRowIndex; ViewState["_maximumRows"] = maximumRows; if (TotalRows > -1) { if (TotalRowCountAvailable != null) { TotalRowCountAvailable(this, new PageEventArgs((int)ViewState["_startRowIndex"], (int)ViewState["_maximumRows"], TotalRows)); } } } protected override void OnDataPropertyChanged() { if (MaximumRows != -1) { this.RequiresDataBinding = true; } else base.OnDataPropertyChanged(); } protected override void RenderChildren(HtmlTextWriter writer) { if (MaximumRows != -1) { foreach (RepeaterItem item in this.Items) { if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem) { item.Visible = false; if (item.ItemIndex >= (int)ViewState["_startRowIndex"] && item.ItemIndex <= ((int)ViewState["_startRowIndex"] + (int)ViewState["_maximumRows"])) { item.Visible = true; } } else { item.Visible = true; } } } base.RenderChildren(writer); } public override void DataBind() { base.DataBind(); if (MaximumRows != -1) { int i = 0; foreach (object o in GetData()) { i++; } ViewState["_totalRows"] = i; if(PersistentDataSource) ViewState["DataSource"] = this.DataSource; SetPageProperties(StartRowIndex, MaximumRows, true); } } protected override System.Collections.IEnumerable GetData() { return base.GetData(); } public event System.EventHandler
TotalRowCountAvailable;}

编译后在asp.net WebForm中使用方法如下:

<%# Eval("Value") %>

在后台事件中添加以下代码:

protected void Page_Load(object sender, EventArgs e) {    if(!IsPostBack)    {        System.Collections.SortedList SL = new System.Collections.SortedList();        SL.Add("val1","Text1");        SL.Add("val2","Text2");        SL.Add("val3","Text3");        SL.Add("val4","Text4");        SL.Add("val5","Text5");        SL.Add("val6","Text6");        SL.Add("val7","Text7");        SL.Add("val8","Text8");        SL.Add("val9","Text9");        rep1.DataSource = SL;        rep1.DataBind();    } }

全文完。翻译自CodeProject。

转载于:https://www.cnblogs.com/ranran/archive/2011/11/22/RepeaterSupportDatapaper.html

你可能感兴趣的文章
背包九讲(转)
查看>>
HDU5988 Coding Contest(浮点费用流)
查看>>
css3文字溢出显示省略号
查看>>
Rugy 茶余饭后
查看>>
Linux shell中运行命令后加上字符“&”的作用
查看>>
MySQL存储引擎对比
查看>>
[Android Pro] AsyncTaskLoader vs AsyncTask
查看>>
[Linux] du-查看文件夹大小-并按大小进行排序
查看>>
转:numpy数据集练习——鸢尾花数据集
查看>>
把wcf服务,改成restful方式,以及吐槽
查看>>
SpatiaLite 各版本数据库差异
查看>>
Python变量和数据类型
查看>>
HTML(二)选择器
查看>>
C++ 类模板的使用
查看>>
AJAX编程-封装ajax工具函数
查看>>
Common Lisp学习笔记(九)
查看>>
一只菜鸡的话
查看>>
变量声明和定义的区别
查看>>
python之路之课后作业
查看>>
p4475 巧克力王国
查看>>