在分析之前,为了帮助读者更好的阅读以上源代码,下面列举了MyPanel类图。

图2
|
如上代码所示,MyPanel继承自WebControl基类,其中定义了3个属性BackImageUrl、HorizontalAlign和Wrap。关于这3个属性的说明,读者可参考前面的内容。另外,MyPanel重写了CreateControlStyle方法,返回一个MyPanelStyle对象。这样返回的MyPanelStyle实例间接的赋值给ControlStyle属性。这种实现方法的原因是由于ControlStyle属性是只读属性,且它的访问操作需要调用CreateControlStyle方法时间接进行设 |
|
上一篇文章对控件样式属性的基本概念进行了介绍,同时,还通过示例说明了重写样式属性的方法。本文重点对类型化样式属性的创建方法进行讲解。
实现类型化样式属性的方法
继承自Style类的类称为类型化样式。Style类可以由控件开发人员来扩展,创建一个自定义类型化样式,它重写或者添加Style类的属性。服务器控件也可以把自定义类型化样式作为ControlStyle属性的类型。例如,Table控件的ControlStyle属性就是TableStyle类型,该类型是扩展的Style,添加了例如CellPadding、CellSpacing和GridLines属性等。在初步了解类型化样式属性的基本概念之后,下面列举了实现类型化样式属性的方法要点。
(1)创建一个派生自System.Web.UI.WebControls.Style的类;
(2)定义样式将为控件提供的属性。在Style的ViewState字典中保存该属性;
(3)重写CopyFrom和MergeWith方法,从定义的属性中复制或者将定义的属性和一个给定样式的属性合并;
(4)重写Reset方法,删除添加到ViewState中的属性;
(5)重写AddAttributes
导言
本教程的第一节所描述的数据访问层(Data Access
Layer,以下简称为DAL)已经清晰地将表示逻辑与数据访问逻辑区分开了。不过,即使DAL将数据访问的细节从表示层中分离出来了,可它却不能处理任何的业务规则。比如说,我们可能不希望产品表中那些被标记为“停用”的产品的“分类编号”或“供应商编号”被更新;我们还可能需要应用一些资历规则,比如说我们都不希望被比自己的资历还要浅的人管理。另外一个比较常见的情况就是授权,比如说只有那些具有特殊权限的用户可以删除产品或是更改单价。
我们其实可以将业务逻辑层(Business Logic
Layer,以下简称BLL)看作是在数据访问层和表示层之间进行数据交换的桥梁,在这个章节中,我们将讨论一下如何将这些业务规则集成到一个BLL中。需要说明的是,在一个实际的应用程序中,BLL都是以类库(Class
Library)的形式来实现的,不过为了简化工程的结构,在本教程中我们将BLL实现为App_Code文件夹中的一系列的类。图一向我们展示了表示层、BLL以及DAL三者之间的结构关系。
ASP.NET
Web窗体页面是一个宣告式的文本文件,扩展名是.aspx。除了静态的内容之外,你还可以使用八种不同的语法标记元素。这一部分回顾这些语法元素并提供了一些使用方法示例。
呈现代码的语法:<% %>和<%= %>
代码呈现块用<% ...
%>元素表示,它允许你控制呈现的内容,在Web窗体页面执行的显示阶段执行。下面的例子演示了如何使用它们循环显示HTML的内容。
<%@ Page Language='VB' %>
<html>
<body>
<% Dim I As Integer
For I = 0 To 7 %>
<font size='<%=I%>'> Hello World! </font> <br>
<% Next %>
</body>
</html> |
<% ... %>包含的代码只是执行,而包含等号(<%= ...
%>)的表达式会在显示内容的时候计算结果。因此,<%='Hello World' %>与C#代码<%
Response.Write('Hello World'); %>显示的结果相同。
请注意,由于语言需要使用标记来终止或分离语句(例如C#中的分
除了代码和标记之外,ASP.NET
2.0页面还可以包含服务器控件,它们是可编程的服务器端对象,典型情况下表现为页面中的UI元素(例如文本框或图像)。服务器控件参与页面的执行过程,并给客户端生成自已的标记呈现内容。服务器控件的优势在于,它让开发者从简单的积木式的组件中获取复杂的呈现方式和操作行为,极大地减少了生成动态Web页面所需要编写的代码量;另外一个优势是,定制它们的呈现方式和行为非常简单。服务器控件所暴露的属性可以通过宣告式(在标记中)或编程(在代码中)设置。服务器控件(和页面控件本身)还暴露了一些事件,开发者可以处理这些事件,在页面执行的过程中,或者响应向服务器发回页面的客户端操作(Postback)的时候,所需来执行的特定操作。服务器控件还简化了保留状态信息的问题,它会自动地在多个成功的“发回”
操作之间保留值。
服务器控件是在.aspx文件中使用自定义标记或固有的HTML标记声明的,它包含了runat='server'属性值。固 |
|
GridView控件是由一系列数据显示控件之一,它可以绑定到 SqlDataSource 控件以返回的数据记录的字段以动态生成网格,
GridView为我们提供了多种数据绑定列类型,例如BoundField
默认数据绑定列类型是一种简单的数据类型,展现了文本数据值。
其他类型方面的数据显示文本内容交替使用、CheckBoxField 复选框显示布尔数据类型、CommandField
显示一个按扭,按扭的类型可以是Button
普通按扭、LinkButton超链接按扭、ImageButton图片按扭,等等类型,GridView控件还提供Templatefield,使用模板.
可以对数据字段进行自定义的模板,模板可包括各种静态文本、lable、TextBox 文本框.
此外,有各种Templatefield模板,可被用来为用户提供了不同情况下的模板。例如,ItemTemplate显示模板可以用来制作显示数据时的,但EditItemTemplate编辑模板可以用来制作编辑时、HeaderTemplate自定义表头模板、FooterTemplate自定义表尾模板。
今天我们要介绍如何利用Templatefield设置
GridView的外观样式.下面的示例我们要用GridView控件显示Northwind数据库下的employees(雇员表)的EmployeeID、LastName、FirtName、BrthDote字段,要列出所有的员工,员工的姓、名
上一篇文章介绍了实现自定义服务器控件事件的基本概念。本文将通过典型示例讲解捕获回传事件的实现方法。
1. 实现捕获回传事件
如果服务器控件需要捕获来自客户端的回传事件,并想为该回传事件自定义服务器端事件处理逻辑,那么控件必须实现System.Web.UI.IPostBackEventHandler接口。下面列举了该接口定义。
public interface IPostBackEventHandler
{
void RaisePostBackEvent(string eventArgument);
} |
如上代码所示,IPostBackEventHandler接口仅包括一个成员方法RaisePostBackEvent。该方法使服务器控件能够处理将窗体发送到服务器时引发的事件,其参数eventArgument表示要传递到事件处理程序的可选事件参数。开发人员可以在RaisePostBackEvent方法中实现服务器控件回传过程中执行的逻辑。一般情况下,RaisePostBackEvent方法将引发一个或者多个服务器端事件。以下代码片段显示了在服务器上引发Click事件的RaisePostBackEvent实现。
数据库命令执行时使用Command对象。Command类有三种:SqlCommand、OleDbCommand与OdbcCommand。
Command对象主要用来运行SELECT、INSERT、UPDATE或DELETE之类的SQL语句。Command对象还可以调用存储过程或从特定表中取得记录。
DataReader对象主要是用来读取数据结果,使用它读取记录时通常比从DataSet更快。DataReader类有三种:SqlDataReader、OleDbDataReader和OdbcDataReader。DataReader对象用Commmand对象从数据库中读取记录,并且DataReader对象只能向前的读取记录,用于在某些情况下替代DataSet对象(DataSet对象可以存储数据库中的行拷贝,可以在切断数据库的连接时处理这个拷贝,我们将在以后的章节中详细介绍该对象)。
注意:不能用DataReader修改数据库中的记录,它是采用向前的,只读的方式读取数据库。
SqlCommand类
SqlCommand对象用于对Sql
Server数据库执行命令。OleDbCommand对象用于对支持OleDb的数据库执行命令,如Oracle与Access。OdbcCommand对象用于对支持Odbc的数据库执行命令。尽管SqlCommand类是针对Sql
Server的,但是这个类的许多属性
主题和外观是ASP.NET 2.0 中的新增功能, 使用 ASP.NET 2.0
的“主题和外观”功能,可以将样式和布局信息分解为单独的文件组,统称为“主题”。然后,主题可应用于任何站点,影响站点中页和控件的外观。这样,通过更改主题即可轻松地维护对站点的样式更改,而无需对站点各页进行编辑。还可与其他开发人员共享主题。应用
ASP.NET 2.0的“主题和外观”功能轻松实现对网站美观的控制。
ASP.NET 提供了一些可在应用程序中对页和控件的外观或样式进行自定义的功能。控件支持 Style
对象模型,用于设置字体、边框、背景色和前景色、宽度、高度等样式属性。控件还完全支持可将样式设置与控件属性分离的级联样式表
(CSS)。可以将样式信息定义为控件属性或 CSS,也可以在名为 Theme
的单独文件组中定义此信息,以便应用于应用程序的全部或部分页。各控件样式在主题中被指定为 Skin。
“主题”,它提供了一种简易方式,可以独立于应用程序的页为站点中的控件和页定义样式设置。多个主题的优点在于,设计站点时可以不考虑样式,以后应用样式时也无需更新页或应用程序代码。此外,还可以从外部源获得自定义主题,以便将样式设置应用于应用程序。一个主题
前面几篇文章讲解了与利用
ASP.NET
2.0技术创建自定义服务器控件属性有关的内容。从本文开始,包括随后的几篇文章将探讨创建自定义服务器控件事件的方法。本文重点对实现控件事件的基本概念进行介绍,这些概念对于帮助开发人员为服务器控件创建事件有着重要意义。
1. 事件基本概念
事件是当有动作发生或者状态改变时,类发出的信息或者通知。通常情况下,状态的发生或者改变由用户界面动作初始化,例如,单击按钮,或者由于其他的程序逻辑引起。产生事件的类或者说发送通知的类叫做事件源sender,接收事件的类叫做事件接收者receiver。二者之间通过委托(delegate)实现关联。下面列举了一段常见的应用事件代码。
// 声明事件
ClickcustomControl.Click += new
EventHandler(this.customControl1_Clicked);
// 实现事件处理程序
customControl1_Clicked(object sender,EventArgs e){......} |