首页
ASP教程
PHP教程
.NET教程
MSSQL教程
Mysql教程
Html/Css
JavaScript
Dreamweaver
站长
当前位置:
首页
>>
.Net技术问答1
>>
.Net问答1
>>项目总结(七)理解asp.net中的模板
项目总结(七)理解asp.net中的模板
问: 理解asp.net中的模板 前言:本文从msdn 2002年第一期的cutting-edge栏目中翻译而来,它讲述的asp.net中的模板(template)的应用。在项目上非常有用,我在项目中应用datagrid、datalist控件时,从这篇文章中学到了许多的东西,应该说它包括了大部分的datagrid或datalist控件的实际应用。同上篇总结一样,建议你把所有的文字都拷到word中,把原文的图片下载下来,然后插入到相应的位置,然后再阅读本文。原文还可以下载源代码,下下来后,你可以本机试试。希望英文好的同志指正。万分感谢! 原文见: http://msdn.microsoft.com/msdnmag/issues/02/01/cutting/default.aspx 在asp.net中我们可以通过设置属性或css样式来定制Web服务器控件。有一些控件允许你通过asp.net模板来定制它们。一个asp.net模板是由html元素和asp.net控件组成的混合体,它把这些元素包装成一个特殊的控件。模板具有不同的样式。样式主要是指css样式表和影响图形的属性,例如颜色、字体、边框样式、单元格边距及其它。控件在构造了时是不变的,但结合样式,控件在显示时可以修改。 相对来说,模板可以任意的组合其它控件及改变它包含的控件的用户界面。例如,Repeater控件允许你组合html元素和asp.net web控件,并把控件绑定到数据源,以行形式的呈现。同样的datagrid控件让你运用任何有效的asp.net控件格式化所有的列中的单元格。除此以外,datagrid控件还支持通过应用不同的模板来自定义普通行,分隔行,选中行等等。 asp.net整个模板的后台机制完全不同于windowxp或windows的后台模板机制,最重要的一点是,理解包含哪些用户界面的元素可以给用户定制。win32平台有客户端和非客户端的普通控件,Windows xp有独特样式的控件,ASP.NET 又有它独特的模板控件。在win32平台,程序员通过消息调用相关绘画进程,以呈现某个控件。在window xp平台下,控制台调用某块代码注册重绘事件,然后触发该事件绘制某个控件。在asp.net中,控件类都继承ITemplate接口, ITemplate接口能动态的创建pagelets和插入html 代码到控件所属的页面中。 样式表和模板不是互斥的。你可以同时运用样式表和模板,或者分别使用它们,以控制呈现定义在你的模板里面的元素。当某个被模板化的控件(例如说datagrid)被处理时,模板就会在包含它的页中被实例化然后呈现为html。 在这个专栏,我将襄括asp.net 的三个模板化控件:Repeater、DataLis和DataGrid来讲解模板的应用。它们都支持扩展模板,可以让你根据你自己的数据自定义其呈现方式。此外,我将举例讲解怎样编程动态地加载模板,及怎样应用模板创建一个可以多选的datagrid控件。在所有的例子中,我将要用到sql server 2000的Northwind数据库中的Employees表。 什么是模板,在什么地方呢 通俗的讲,模板是用来说明在运行时怎样把某个元素呈现出来。在asp.net 中,模板是服务器控件的一个属性,它包含了静态的html代码、控件以及用于在某个特定区域呈现控件的脚本。例如,一个Repeater控件有一个HeaderTemplate属性,它定义了repeaper控件的头部内容。通常你会运用asp.net的语法定义一个模板。例如下面的代码说明了怎样指定模板以画出Repeater的头和每一行的内容。 <asp:repeater runat="server"> <HeaderTemplate> <h2>Employees</h2> <table border="0"> </HeaderTemplate> <ItemTemplate> <tr>...</tr> </ItemTemplate> </asp:repeater> 当它开始呈现Repeater控件的内容时,ASP.NET用在模板中定义的内容和进程一起绑定数据,创建描述数据的html代码。所有的服务器控件都包含一个可以用html描述并呈现它们自己的模板。 .NET Framework框架运用ITemplate接口在运行时处理模板中的每层控件,这些控件能够绑定到数据然后呈现为该模板的一部分。如果你仅运用inline tags在aspx页面中声明了一个公共样式的模板,你不必了解ITemplate 接口。只有当你需要更进一步的了解和研究怎样创建模板和动态的用程序声明模板时, 充分的理解ITemplate 接口就很重要了。但是在我们了解它之前,让我们一起来看一下模板在datagrid控件中的应用。 DataGrid的模板列 基于模板的列在datagrid控件中扮演了一个很重要的角色,它们允许你增加任意一种类型的列到datagrid,datagrid通过纯文本的形式或者某种预定义的列类型显示内容。然而,有时预定义的列类型并不能实现我们想要的东西。模板列有四种不同的模板,如图1 Figure 1 DataGrid Column Templates Name Description ItemTemplate Contains the template for the items in a DataGrid's column. <ItemTemplate> <asp:label runat="server" text= '<%# ... %>'...> </ItemTemplate> You can use any combination of HTML text and ASP.NET controls to populate the column. EditItemTemplate Controls the contents of the item selected for editing in the column of the DataGrid control. Place the controls you need for editing the cell between the opening and closing EditItemTemplate tags. <EditItemTemplate> <asp:textbox runat="server" text= '<%# ... %>'...> </EditItemTemplate> HeaderTemplate Contains the template for the heading section. <HeaderTemplate> <asp:label runat="server" text= "Header"...> </HeaderTemplate> If you omit this template, the column header is rendered with a label or a hyperlink if sorting is enabled. By specifying a custom template, you make yourself responsible to provide the user interface needed to enable sorting on the column. FooterTemplate Contains the template for the footer section of the column. The default value is a null reference. <FooterTemplate> <asp:label runat="server" text= "..."...> </FooterTemplate> The footer is displayed only if the ShowFooter property of the DataGrid is set to True. 你可能会频繁的使用模板列(ItemTemplate)。它定义了怎么样显示列中的单元格及由哪些元素组成控件的内容。HeaderTemplate 和 FooterTemplate我们就不说了,相信大家都知道是干什么用的。当列的所属行进入编辑模式时,EditItemTemplate属性指明单元格应该怎样变化。但要注意的是,它和datalist控件不一样,datagrid没有选中模板。 当你需要用不规范的方式显示整个列的时候,你的DataGrid应该用基于模板的列。如果你需要显示数据的数据无法用datagrid 提供的普通的模板显示时,这时,模板就是你的最佳选择了。 ______________________________________________________________________________________________ 答1: 下面的代码演示了怎样绑定数据到datagrid控件的模板列。 <asp:TemplateColumn runat="server" HeaderText="heading"> <itemtemplate> ...ASP.NET layout goes here... </itemtemplate> </asp:TemplateColumn> 注意模板列和其它类型的列一样,也有一个可用于排序的标题文字。模板列没有直接用于绑定数据源字段的属性。也就是在TemplateColumn类的成员里面,你找不到任何DataField或DataTextField属性。 缺少直接绑定数据源字段的属性是为了更灵活的处理列的显示布局。要呈现一个列,你可以用label控件的text属性,当然也可以用dropdownlist控件或者image控件,这两个控件都没有类似text的属性。结果一样,你都必须用一个数据绑定表达式来绑定数据。在我看来,虽然要写冗长的数据绑定表达式,但它却给了你极大的灵活性。 下面的代码片断演示怎样正确绑定内容到item template: <asp:label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "lastname") %>' /> 通过用DataBinder.Eval方法,你能够访问当前数据源的任何一个字段。除此以外,你还可以结合任何的排序表达式来对字段进行排序。这是用其它简单的模板列无法实现的。 Figure 2 Column 在图2中,你能看到一个基于模板列实现的例子,它演示了怎样在一列中显示数据源中两个字段。在不是基于模板的列中只能获得(显示)一个字段。这个模板的代码如下所示: <itemtemplate> <%# "<b>" + DataBinder.Eval(Container.DataItem, "lastname") + "</b>, " + DataBinder.Eval(Container.DataItem, "firstname") %> </itemtemplate> 如果你需要结合更多的字段在同一个列中显示,模板列是唯一的方法。如果你需要对某个单元格应用一种特殊的格式,你最好就用datagrid的ItemCreated 事件或者ItemDataBound事件。例如,如果你要改变某个单元格的背景色,或者你要根据某种条件来对单元格应用其它的样式表,你可以在ItemCreated的处理事件中,确定正在创建的项(item)是你需要处理的类型(item 或者AlternatingItem类型),然后应用新的或已存在的样式表。在ItemCreated事件触发时,仍不能保证那一项(item)已经绑定了数据。通过ItemCreated事件的参数e的dataitem属性可以得到触发该事件的datagriditem对象。对于datagrid的ItemCreated事件,它的事件参数是DataGridItemEventArgs类型: void ItemCreat
copyright 2004-2009
www.qqcf.com
all rights reserved. DIV+CSS架构
本站为学习性免费网站,没有任何商业性质,甚至连一个外部广告都没有投放
所有文章均来源于互联网,如发现有侵权,请来信告知,本站将会以最快的速度删除和改正,E-Mail:cftop@qq.com