自定义控件的构建(12)

Share

前面讲了模板的构建,我们忽略了一个细节,如果接触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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

insertAfter()

<div id"b">bbbbbbbbb</div> <div>dddddd</div> JavaScript window.οnlοadfunction(){var a document.createElement("span");var b document.createTextNode("cssrain");a.appendChild(b);var mubiao document.getE…

学计算机等级考试电脑版软件,计算机二级考试宝典电脑版

计算机二级考试宝典电脑版是一款专业的二级计算机内容学习软件。该软件由武汉大学团队真情研发&#xff0c;软件包含选择题1600道&#xff0c;非选择题109套&#xff0c;成功实现了考点和重点的全面覆盖式学习目的&#xff0c;对学生们学习起到了巨大的帮助。该版本是通过安卓模…

mysq进阶

学习资料&#xff1a; 官方文档&#xff1a;http://dev.mysql.com/doc/refman/5.0/en/tutorial.html 1.存储过程&#xff1a; 优点&#xff1a;业务逻辑封装在存储过程中&#xff0c;容易维护&#xff0c;执行效率也高。 缺点&#xff1a;不同的数据库功能函数等不一样&#xf…

HTML使用vue的 event,vue-js 特殊变量$event常识

背景如果我们要阻止默认事件&#xff0c;在 chrome 等浏览器中&#xff0c;我们可能要写一个&#xff1a;event.preventDefault();而在 IE 中&#xff0c;我们则需要写&#xff1a;event.returnValue false;jquery &#xff0c;跨浏览器的实现&#xff0c;我们统一只需要写&am…

创建非矩形的Windows 窗体

创建非矩形窗体的过程包含三个步骤&#xff1a;• 创建一个作为窗体图面的位图。&#xff08;一种有效的方式是&#xff0c;您可以从矩形中“裁剪掉”所需的窗体形状。&#xff09;• 创建Windows 应用程序项目&#xff0c;将其属性设置为移除标题栏并使用位图作为窗体背景。•…

ExtJs6 Desktop Demo 修改测试

一直用Extjs4&#xff0c; extjs6 的变化较大&#xff0c;这几天有兴趣研究一下&#xff0c;把自带的Demo的desktop做了些修改&#xff0c; 1.首先下载安装sencha cmd 2.然后 需要生成新项目 用sencha cmd 命令如下&#xff1a; sencha -sdk E:\ext-6.0.0 generate app linb…

包含html语言的超链接标记的网页_零基础入门 HTML 的 8 分钟极简教程

在今天&#xff0c;前端工程师已经成为研发体系中的重要岗位之一。可是与此相对的是&#xff0c;极少大学的计算机专业愿意开设前端课程&#xff0c;大部分前端工程师的知识&#xff0c;也都是在实践和工作中不断学习的。最近收到很多同学的后台留言&#xff0c;说希望多推出一…

mongodb模糊查询_AWS 回击了!推出兼容 MongoDB 的 DocumentDB

2018 年 10 月&#xff0c;MongoDB 将其开源许可证从 GNU AGPLv3 切换到 Server Side Public License(SSPL)&#xff0c;并明确指出之所以会更改开源协议是因为部分云计算公司在使用 MongoDB 的时候没有遵循其开源协议。2019 年 1 月 9 日&#xff0c;AWS 宣布推出 Amazon Docu…

琴岛学院计算机应用技术,我院计算机工程系成功晋级“中国高校计算机大赛-网络技术挑战赛”全国总决赛...

2017年7月22日&#xff0c;由教育部高等学校计算机类专业教学指导委员会、教育部高等学校软件工程专业教学指导委员会、教育部高等学校大学计算机课程教学指导委员会和全国高等学校计算机教育研究会联合主办的“中国高校计算机大赛”首届网络技术挑战赛于济南大学举办。青岛理工…

Android L 的 Tint(着色)

Tint 是什么&#xff1f; Tint 翻译为着色。 着色&#xff0c;着什么色呢&#xff0c;和背景有关&#xff1f;当然是着背景的色。当我们开发 App 的时候&#xff0c;如果使用了 Theme.AppCompat 主题的时候&#xff0c;会发现 ActionBar 或者 Toolbar 及相应的控件的颜色会相应…

《从零开始学Swift》学习笔记(Day 66)——Cocoa Touch设计模式及应用之通知机制...

原创文章&#xff0c;欢迎转载。转载请注明&#xff1a;关东升的博客 通知&#xff08;Notification&#xff09;机制是基于观察者&#xff08;Observer&#xff09;模式也叫发布/订阅&#xff08;Publish/Subscribe&#xff09;模式&#xff0c;是 MVC&#xff08;模型-视图-控…

JUnit3 一次运行多个测试类和进行多次重复测试:使用测试套件和RepeatedTest

测试套件 如果测试类写到很多&#xff0c;每次要进行测试&#xff0c;难道要重新点击每一个测试类来运行&#xff1f;如果有200个测试类要测试呢&#xff1f; 为了解决这个问题&#xff0c;引入了测试套件&#xff08;TestSuite&#xff09;。 通过将多个测试放入套件中&#x…

mysql 不同分区 同时insert_Mysql分区表的原理和优缺点

分区表的原理分区表是由多个相关的底层表实现&#xff0c;这些底层表也是由句柄对象表示&#xff0c;所以我们也可以直接访问各个分区&#xff0c;存储引擎管理分区的各个底层表和管理普通表一样(所有的底层表都必须使用相同的存储引擎)&#xff0c;分区表的索引只是在各个底层…

大理三塔,及崇圣寺里的假深沉

大理三塔&#xff0c;及崇圣寺里的假深沉 记得我第一次看见三塔时&#xff0c;是一副破败不堪的景象。而第二次来大理时&#xff0c;因为“崇圣寺”正在修葺&#xff0c;只能远远地眺望一下三塔。那时我对大理失望极了。 现在三塔修缮一新&#xff0c;给人耳目一新的感觉。 三塔…

WCF三种通信模式(转)

一、概述 WCF在通信过程中有三种模式&#xff1a;请求与答复、单向、双工通信。以下我们一一介绍。 二、请求与答复模式 描述&#xff1a; 客户端发送请求&#xff0c;然后一直等待服务端的响应(异步调用除外)&#xff0c;期间处于假死状态&#xff0c;直到服务端有了答复后才能…

第一个程序,Hello World

在eclipse里新建一个project&#xff0c;选Android-Android Project 然后Next,继续 解释一下 Package Name&#xff1a;这个学过编程的人都应该熟悉了&#xff0c;类似于namespace&#xff0c;你定义的所有东西都在一个包里不会和别的包出现重命名的问题等等&#xff0c;不多说…

Hadoop2.6集群动态添加和删除数据节点

2019独角兽企业重金招聘Python工程师标准>>> 开始之前&#xff0c;应该把所有新增数据节点上的Hadoop环境都配置好&#xff08;如果要直接复制已经存在节点的hadoop文件夹&#xff0c;应该删掉里面已经产生的集群数据&#xff0c;比如tmp和data目录&#xff0c;不然…

拉取ftp服务器上的文件_winscp和云服务器,2步实现winscp将文件上传到腾讯云Linux云服务器...

WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端。同时支持SCP协议&#xff0c;它的主要功能就是在本地与远程计算机间安全的复制文件。与使用FTP上传代码相比&#xff0c;通过WinSCP可以直接使用服务器账户密码访问云服务器&#xff0c;无需在服务器端做任何配置。II…

笔记:设计模式(3)-Abstract Factory抽象工厂模式

工厂模式的起源 1.变化点在“对象的创建”&#xff0c;因此就封装“对象创建”&#xff1b; 2.面向接口编程&#xff0c;依赖接口&#xff0c;而非依赖实现。 动机&#xff08;Motivation&#xff09; 在系统中&#xff0c;经常面临着“一系列相互以来的对象”的创建工作&#…

MongoDB操作:insert()

2019独角兽企业重金招聘Python工程师标准>>> Override public boolean inSert(String dbName, String collectionName, String[] keys,Object[] values) { DB db null; DBCollection dbCollection null; WriteResult result null; String resul…