定制应用Repeater 、ListView的模版
若干年前有个需求:客户可在管理后台给每个新闻内容栏目指定新闻的显示样式,有的可以显示新闻时间,有的则不需要。于是就有了动态模版的应用。记得当时是用 LoadControl 的方式然后 Controls.Add 实现的。最近又遇到了类似的需求,于是想到了能不能在服务端控件绑定前指定Template 即可?经过一番摸索,写下此文备忘。
一般使用 Template 方式有两种方式:Page.LoadTemplate 和实现 ITemplate 接口。
方法一:使用 LoadTemplate 的方式很简单,在调用 DataBind 方法前加载该模板即可,此方法和在页面上直接设置模版类似(详见 test0.aspx 示例)。
protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = data.DataSource();
rpt_t0.ItemTemplate = this.LoadTemplate("wcTest0.ascx");
rpt_t0.DataSource = dt;
rpt_t0.DataBind();
}
方法二:使用 ITemplate 的方式实现: ITemplate.InstantiateIn 只有一个参数 Control,若是给 Repeater 指定模版则此参数是 RepeaterItem 类型等(详见 test1.aspx 示例);在InstantiateIn里通过 container.Controls.Add 的方式输出 Html;
public partial class wcTest1 : ITemplate
{
public DataTable Data { get; set; } public void InstantiateIn(Control container)
{
var data = container as RepeaterItem;
if (null == data) return; int index = data.ItemIndex; var row = Data.Rows[index]; Literal lit = new Literal();
lit.Text = string.Format("<li>test {0},{1}</li>", row[0], row[1]); container.Controls.Add(lit);
}
}
调用:
protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = data.DataSource(); wcTest1 wt1 = new wcTest1();
wt1.Data = dt; rpt_t1.ItemTemplate = wt1; rpt_t1.DataSource = dt;
rpt_t1.DataBind();
}
两者的利弊端比较:
1、使用方法一:可视化程度较好,符合一般使用习惯,修改时不用重新编译;
2、使用方法二:对于输出内容逻辑的控制力更强(当然可以通过定制模版文件的方式变通实现);
定制应用Repeater 、ListView的模版的更多相关文章
- 爱上MVC~为Html.EditorForModel自定义模版
回到目录 挺有意思的一件事 对于MVC视图渲染来说,大家应该不会陌生,但对于模型的渲染,不知道是否听说过,主要是说Model通过它属性的相关特性(DataType,UIHint)来将它们自动渲染到Vi ...
- 1.Repeater控件
在用到数据库数据并且要逐条显示时,就需要用到repeater\listview等这样的数据库控件进行动态的显示数据. Repeater相当于foreach的功能,用于对绑定数据源中的数据进行遍历显示, ...
- Django初级手册2-管理界面的使用及定制
管理界面的使用 管理界面的URL,帐号和密码在第一次输入syncdb时建立 http://127.0.0.1:8000/admin/ 将app加入管理界面 编辑polls/admin.py from ...
- 为Html.EditorForModel自定义模版
对于MVC视图渲染来说,大家应该不会陌生,但对于模型的渲染,不知道是否听说过,主要是说Model通过它属性的相关特性(DataType,UIHint)来将它们自动渲染到View上,这是一个比较不错的技 ...
- Adaptert Listview 优化
这次是关于Listview的优化的,之前一直采用愚蠢的方式来使用listview,出现的情况就是数据多的话下拉的时候会出现卡顿的情况,内存占用多.所以学习了关于listview的优化,并且这也是普遍使 ...
- Django 之模版层
一.模板简介 将前端页面和Python 的代码分离是一种的开发模式. 为此 Django专门提供了模板系统 (Template System,即模板层)来实现这种模式. Django 的模板 = HT ...
- ASP.NET整理
Asp.net六大对象 1.Request-->读取客户端在Web请求期间发送的值 常用方法: 1.Request.UrlReferrer请求的来源,可以根据这个判断从百度搜的哪个关键词.防 ...
- 升讯威微信营销系统开发实践:所见即所得的微官网( 完整开源于 Github)
GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction因为个人精力时间有限,不会再对现有代码进行更新维护,不过微信接口比较稳定,经测试至 ...
- CentOS搭建Vsftpd服务器
转自:http://alca0126.blog.51cto.com/7826974/1754906 一.安装vsftpd服务相关组件 需要安装组件vsftpd pam db4 db4-utils [r ...
随机推荐
- 关于ansbile工具的shell、command、script、raw模块的区别和使用场景
command模块 [执行远程命令] [root@node1 ansible]# ansible testservers -m command -a 'uname -n' script模块 [在远程主 ...
- java FileReader/FileWriter读写文件
java FileReader/FileWriter读写字母和数字没问题,但读写汉字就乱码.记录下,后面找到解决方法再补上. public static void main(String[] args ...
- JVM调优——之CMS GC日志分析
最近在学习JVM和GC调优,今天总结下CMS的一些特点和要点,让我们先简单的看下整个堆年轻代和年老代的垃圾收集器组合(以下配合java8完美支持,其他版本可能稍有不同),其中标红线的则是我们今天要着重 ...
- 关于"996",我想说的 - 人在高潮享受成就,人在低潮享受人生
996 - 9点上班,21点下班,周六必须上班. 这就是IT界的潜规则,之前晚上陪家人看新闻的时候我就看到一则新闻轻描淡写的说了996制度,我当时就想说点甚么,但是没有,然而就仿佛突然的一下爆发了,我 ...
- Nginx 权限问题
At my job we are moving to Nginx for the load balancing of our sites. Nginx is a very powerful load ...
- linux命令(38):split 分割文件
在Linux下用split进行文件分割: 模式一:指定分割后文件行数 对与txt文本文件,可以通过指定分割后文件的行数来进行文件分割. 命令: split -l 300 large_file.txt ...
- Mac安装mtr与brow安装
Mac安装mtr与brow安装 Mac里比较好的安装mtr方式是用Homebrew 或者MacPorts,本来想安装Homebrew,但大概是GFW的问题,下载地址无法访问,因为没有全局FQ,暂时不考 ...
- DIOCP开源项目-DIOCP3 大文件的传输DEMO<断点续传>
首先该DEMO在StreamCoder上面做的改动,期间导致StreamCoderDEMO经常出现问题,导致大家运行的时候,频频出现问题,表示道歉. 以下是测试的结果,从服务器下载传输了一个3G左右的 ...
- hive里的group by和distinct
hive里的group by和distinct 前言 今天才明确知道group by实际上还是有去重读作用的,其实细想一下,按照xx分类,肯定相同的就算是一类了,也就相当于去重来,详细的看一下. gr ...
- 测试redis集群的两种方式:分片和哨兵
import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; i ...