自定义控件的构建(12)
前面讲了模板的构建,我们忽略了一个细节,如果接触ASP.NET时间不长的话,一般都会看到数据表达式是<%#Eval(‘Name’)%>这种形式的,
那么我们为什么用<%#Container.Name%>这种形式呢,其实前者是ASP.NET控件所支持的一种简化写法,如果在自定义控件中支持简化写法,
需要实现IDataItemContainer接口 ,该接口包含3个需要实现的属性
DataItem:返回数据项的值
DataItemIndex:返回数据项在数据源中的索引
DisplayIndex:返回数据项在控件中的索引
那么创建数据绑定控件时实现IDataItemContainer可以将数据库表中每条记录封装到实现这个控件的对象中,这样就实现了简化的数据表达式引用了
看个简单的例子:
先声明一个非数据绑定控件
/// <summary>
/// 简单绑定
/// </summary>
public class SingleBindingsControl:CompositeControl
{
private ITemplate _itemplete;
private Items _item;
public string Name
{
get
{
EnsureChildControls();
return _item.Name;
}
set
{
EnsureChildControls();
_item.Name = value;
}
}
public Decimal Price
{
get
{
EnsureChildControls();
return _item.Price;
}
set
{
EnsureChildControls();
_item.Price= value;
}
}
[TemplateContainer(typeof(Items))]
[PersistenceMode(PersistenceMode.InnerProperty)]
public ITemplate ItemTemplete
{
get
{
return _itemplete;
}
set
{
_itemplete = value;
}
}
protected override void CreateChildControls()
{
_item = new Items();
_itemplete.InstantiateIn(_item);
this.Controls.Add(_item);
}
}
这里声明的SingleBindingsControl控件通过一个ItemTempleate关联到Items类,在CreateChildControls()中,
ItemTempleate实例化到Items类中。
Items的实现
public class Items : WebControl, IDataItemContainer
{
public string Name { get; set; }
public decimal Price { get; set; }
public object DataItem { get { return this; } }
public int DataItemIndex { get { return 0; } }
public int DisplayIndex { get { return 0; } }
}
Items类实现了IDataItemContainer类,简单的实现其中的内容而已
看看其使用,很熟悉的方式
<custom:SingleBindingsControl ID="SingleBindings1" runat="server">
<ItemTemplete>
<%#Eval("Name") %>
<%#Eval("Price","{0:c}") %>
</ItemTemplete>
</custom:SingleBindingsControl>
</div>
添加一数据
this.SingleBindings1.Name = "Hello ,asp.net";
this.SingleBindings1.Price = 123.12M;
this.DataBind();
OK,一直用Eval()的朋友知道Eval的是怎么出来的了吧。。。
本文参《ASP.NET 3.5揭秘》
转载于:https://www.cnblogs.com/626498301/archive/2010/08/11/1797047.html
自定义控件的构建(12)相关推荐
- 自定义控件的构建(10)
Share 通过前面一系列的改进,我们已经可以初步构建出一个功能相对比较全面的控件了,那么,本篇关注一下我们一直忽略的地方,即如何在VS设计器中显示. 设计器体验 这主要有两种方式:控件设计时特性与关 ...
- 我们如何构建12层堆栈而又不疯狂
从2018年6月起,Appodeal拥有约100人的团队,他们在旧金山,莫斯科,基洛夫,巴尔瑙尔,巴塞罗那以及现在的明斯克工作. 我们通过向用户展示广告来通过移动应用获利. 我们从广告中介开始,但由于 ...
- 自定义控件的构建(5)
Share 在ASP.NET框架中支持在回传中保存值的有2种方式:视图状态和控件状态 视图状态 ASP.NET中几个对象属性与控件最为密切的,就是ViewState了. 这里对其做下说明,任何可序列化 ...
- [转]决定何时使用 DataGrid、DataList 或 Repeater
摘要:了解 ASP.NET 用于显示数据的三个控件: DataGrid.DataList 和 Repeater. 这些控件中的每一个都有独特的特性以及相关的优点和缺点. 创建显示数据的 ASP.NET ...
- euclidea4攻略_Euclidea几何构建10.4通关攻略
Euclidea几何构建全关卡通关攻略大全 玩腻味了哪些大开发商的游戏,小编给大家推荐一款挺有意思的小游戏Euclidea.Euclidea几何构建是一款具有理科生浪漫的游戏,这是一款数学几何风格的休 ...
- 数人云|两个故事,看12要素如何助力亚马逊和Netflix开启云原生大门
云原生体系图 应用开发的模式,无论是团队还是个人都在不断的发展,开源为软件行业提供了很多工具.框架.平台和操作系统,它们都越来越关注与灵活性和自动化,当今最流行的开源工具主要都集中在一些特性上,这些特 ...
- 数人金|两个故事,看12要素如何助力亚马逊和Netflix开启云原生大门
云原生体系图 应用开发的模式,无论是团队还是个人都在不断的发展,开源为软件行业提供了很多工具.框架.平台和操作系统,它们都越来越关注与灵活性和自动化,当今最流行的开源工具主要都集中在一些特性上,这些特 ...
- 2022-2028年中国智能制造装备产业深度调研及投资前景预测报告
[报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了智能制造装备行业相关概述.中国智能制造装备行业运行环境.分析了中国智 ...
- 天云数据CEO雷涛:从软件到数件,AI生态如何建立自己的“Android”?| 量子位·视点分享回顾...
视点 发自 凹非寺 量子位 公众号 QbitAI 技术的市场千变万化. 首先在算法上摩尔定律失效,大规模分布式大规模协同算力开始产生新的变化: 其次,互联网带来数据实时性的需求,爆发第三波数据红利: ...
最新文章
- 将类别加入到别人的名称空间内
- mysql返回查询条件_mysql条件查询
- Annotataion
- ESP32 OTA升级框架
- java setsolinger_java socket 的参数选项解读(转)
- 高考能否决定一个人的命运?抱歉,真的可以!
- 想要成为一名三维建模师?想要月薪10K?你了解这些吗?
- java的printf语法_Java中printf的用法总结
- dubbo原理和机制_面试官几个 Dubbo 微服务框架问题,把我整懵了?
- CoppeliaSim用户手册中文翻译版(一)
- Quartz配置信息
- 三菱伺服驱动器MR-J2S 70A伺服驱动器电源驱动板图纸
- 阿里巴巴线上面试总结
- Visual Studio Code安装及设置
- Golden Software BLN文件格式
- SpringCloud客户端Client启动时自动停止
- php 色彩空间转换,PHP Imagemagick将灰度转换为RGB
- 常用印制电路板标准汇总
- Ubuntu多硬盘luks全盘加密自动解锁(硬件变更后失效)的方法
- 建议先倒杯水,这次的货是真的干
热门文章
- 数学--数论--HDU 2582 F(N) 暴力打表找规律
- 图论--2-SAT--poj 3678-Katu Puzzle(模板题)
- linux下如何使用configure/make/make install命令编译安装卸载程序
- linux-shell命令之chmod(change mode)【更改权限】
- Eigen入门之密集矩阵 8 - resharp slicing切片
- 【python 8】python 装饰器
- vgg 名人人脸图像库_您看起来像哪个名人? 图像相似度搜索模型
- kernel panic 和 kernel Oops
- 测试回收站测试回收站测试回收站测试回收站测试回收站测试回收站测试回收站测试回收站
- 逾期后还能消除不良记录吗?