自定义控件的构建(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,一经查实,立即删除!

相关文章

矩阵快速幂 zoj-3690 Choosing number

题目链接&#xff1a; http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId4973 题目意思&#xff1a; 有n个人&#xff0c;有1——m个数&#xff0c;每个人可以选择1个数&#xff0c;要求相邻的两个人如果选的数相同则必须大于k,求选数的种数。 解题思路&#xff1a…

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…

python def 参数一直为false_在Python 3中,如果参数为False,则查找惯用的方法来评估为False...

我有一连串的功能,全部定义在课程其他地方&#xff1a;fus(roh(dah(inp)))其中inp是字典或bool(False).期望的结果是,如果inp或任何函数评估为False,则False由函数堆返回.我试图使用三元运算符,但是它们不能正确评估.def func(inp):return int(inp[value]) 1 if inp else Fals…

复试计算机网络与软件工程,2018华南理工大学软件工程复试经验贴

尘埃落定&#xff0c;昨天结束了复试&#xff0c;终于被拟录取了&#xff0c;只有真正经历过才知道不容易&#xff0c;一年来受到王道的很多帮助&#xff0c;论坛上软件工程的信息相对来说还是比较少的&#xff0c;所以也想分享下自己的一些经验&#xff0c;帮助后来人。本人普…

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

计算机二级考试宝典电脑版是一款专业的二级计算机内容学习软件。该软件由武汉大学团队真情研发&#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…

归纳整理--第4篇--常用软件

CSDN博客不再经常更新&#xff0c;更多优质文章请来 粉丝联盟网 FansUnion.cn! (FansUnion) 随着软硬件设施的提高和网民网络生活的丰富&#xff0c;电脑上的软件越来越多。对于一个专业开发者来说&#xff0c;尤其如此。常用软件主要分2类。1.娱乐休闲类。普通网民使用的一些软…

获取主机的信息

BOOL GetLocalHostInfo(){   //得到主机名称   int nComputerNameLen;   nComputerNameLen MAX_COMPUTERNAME_LENGTH 1;   if(SOCKET_ERROR gethostname(m_chLocalHostName,nComputerNameLen))     return FALSE;   ///end//   ///得到主机IP地址   HOST…

python数据动画_[转载]Maya使用Python获取动画每帧的rotation数据

import maya.cmds asmcimport os#添加一个"Maya动画收集数据"窗口设置动画开始播放#win mc.window(title "Maya动画收集数据", w 400, h 40)#mc.frameLayout( lvFalse )#mc.playbackOptions( minTime0, maxTime20 )mc.select("jamie_arm_R",…

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;将其属性设置为移除标题栏并使用位图作为窗体背景。•…

python3装饰器例子_python 装饰器(三):装饰器实例(一)

示例 7-15 定义了一个装饰器&#xff0c;它会在每次调用被装饰的函数时计时&#xff0c;然后把经过的时间、传入的参数和调用的结果打印出来。示例 7-15 一个简单的装饰器&#xff0c;输出函数的运行时间importtimedefclock(func):def clocked(*args): #➊t0 time.perf_counte…

《c专家编程》笔记--define和typedef的区别

#include <stdio.h> #define peach int typedef int banana;int main(void){unsigned peach a;unsigned banana b;return 0; } 上面的代码中&#xff0c; unsigned banana b; 该行编译会出现错误。 因为typedef是一种彻底的“封装”类型&#xff0c;而#define只是简单的文…

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;说希望多推出一…

验证dropdownlist必选

假定dropdownlist: <asp:dropdownlist id"ddListNewsType" runat"server"><asp:ListItem Value"请选择类别" Selected"True">请选择类别</asp:ListItem><asp:ListItem Value"新闻中心">新闻中心<…

kotlin读取html,kotlin 使用skrape {it}从html获取数据 - 糯米PHP

查看语法&#xff0c;我假设您使用的是0.6.0版。您必须使用更特定的CSS选择器。data class MyScrapedData(val userName: String,val link: String)fun main() {val githubUserData skrape {url "http://www.website"extract {MyScrapedData(userName el("di…

C++函数默认值的用法

C函数默认值的用法 在C中&#xff0c;函数允许提供一个默认值。这样&#xff0c;当函数被调用时如果没有提供这些参数的值&#xff0c;编译器会自动使用默认值。示例代码如下&#xff1a; #include <iostream>// 函数声明&#xff0c;指定默认参数 void myFunction(int…

c++单链表【构造函数、运算符重载、析构函数、增删查改等】

c中的单向链表写法&#xff1a;实现增删查改、构造函数、运算符重载、析构函数等。建立头文件SList.h#pragma oncetypedef int DataType; //SList要访问SListNode&#xff0c;可以通过友元函数实现&#xff0c;友元函数在被访问的类中 class SListNode {friend class SList;//友…

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

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