跟小D每日学口语
Ted's Blog
记录点点滴滴、见证岁月痕迹; 励志照亮人生、技术改变命运。
博客园
首页
新随笔
联系
订阅
管理
随笔 - 12 文章 - 0 评论 - 43 trackbacks - 2
<
2008年10月
>
日
一
二
三
四
五
六
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
给我留言
查看留言
我参加的小组
web标准设计
ASP.NET
WinForms
我参与的团队
微软(西安).NET开发俱乐部(1/749)
我的标签
DataBoundControl
(3)
分布式计算
(1)
网格计算
(1)
云计算
(1)
JSON
(1)
XML
(1)
Interop
(1)
CLR
(1)
COM
(1)
IPostbackContainer
(1)
更多
随笔分类
(3)
ASP.NET AJAX Client Library
ASP.NET DataBoundControl(3)
随笔档案
(12)
2008年9月 (1)
2008年7月 (4)
2008年6月 (4)
2008年5月 (3)
最新评论
1. re: Please stop re-inventing the wheel (请不要重复发明轮子)
很棒哦!!
--Jillean Wong
阅读排行榜
1. ASP.NET 2.0 Client Callback 浅析(2030)
2. XML和JSON(JavaScript Object Notation)(1470)
3. IPostbackContainer 和 ICallbackContainer(1452)
4. Inside ASP.NET 2.0 DataBound Control - 1(1328)
5. Inside ASP.NET 2.0 DataBound Control - 2(1319)
评论排行榜
1. ASP.NET 2.0 Client Callback 浅析(9)
2. XML和JSON(JavaScript Object Notation)(9)
3. ASP.NET AJAX UpdatePanel 控件实现剖析(9)
4. ASP.NET自定义控件复杂属性声明持久性浅析(5)
5. IPostbackContainer 和 ICallbackContainer(3)
Inside ASP.NET 2.0 DataBound Control - 2
l
原创文章,如需转载,请注明出处。
DataBoundControl
DataBoundControl是一个抽象类,从BaseDataBound类派生,用来绑定List或者Table状数据。所有用来显示或编辑List或Table状数据的绑定控件都应该从该类派生,例如ListBox,DropDownList,CheckboxList还有GridView。
DataBoundControl实现的主要功能是从数据源中获取数据,无论用户是通过设置DataSource还是通过DataSourceID进行的数据绑定。获取到的数据将以IEnumerable的方式提供给派生类,这样派生类将不再需要关心如何从数据源中获取数据,而只需要关心其本身的业务逻辑即如何展示绑定数据。
1. DataBoundControl接口:
1
public
abstract
class
DataBoundControl : BaseDataBoundControl
2
{
3
public
virtual
string
DataMember
{
get
;
set
; }
4
protected
DataSourceSelectArguments SelectArguments
{
get
; }
5
6
protected
override
void
PerformSelect();
7
protected
virtual
void
PerformDataBinding( IEnumerable data);
8
9
protected
virtual
DataSourceView GetData();
10
protected
virtual
IDataSource GetDataSource();
11
}
DataMember
DataMember属性用来指定绑定数据列表名称,用户设置的数据源可能会包含多个不同的数据项列表。比如绑定到控件的数据源控件含有多个DataSourceView,或者绑定到控件的数据源是一个DataSet,而这个DataSet含有多个数据表格。
SelectArguments
而SelectArguments属性则定义了用于向数据源控件检索数据时使用的 DataSourceSelectArgument 对象,注意使数据源控件,也就是通过DataSourceID进行的数据绑定。
通过该对象可以指定检索数据的起始行位置、最大行数,设定排序表达式,同时还可以检索数据源的总行数。
下面是DataSourceSelectArgument 对象的接口:
1
public
sealed
class
DataSourceSelectArguments
2
{
3
public
int
StartRowIndex
{
get
;
set
; }
4
public
int
MaximumRows
{
get
;
set
; }
5
6
public
string
SortExpression
{
get
;
set
; }
7
8
public
bool
RetrieveTotalRowCount
{
get
;
set
; }
9
public
int
TotalRowCount
{
get
;
set
; }
10
}
DataBoundControl的派生类可以通过配置SelectArguments来优化数据查询,比如当控件支持分页功能的时候,可以只检索当前页面所需数据。
PorformSelect, PerformDataBinding
DataBoundControl重载了PerformSelect方法,在这个方法中控件将会向数据源检索数据,并且将检索到的数据作为参数来调用PerformDataBinding方法。
PerformDataBinding是DataBoundControl类定义的虚方法,派生类只需要Override该方法,处理检索到的数据就可以了。
GetDataSource
从绑定的数据源中获取相关联的IDataSource对象,用户必须是通过设置DataSourceID属性来进行数据绑定的,否则将会返回一个空引用。
看一下IDataSource这个接口:
1
public
interface
IDataSource
2
{
3
event
EventHandler DataSourceChanged;
4
5
DataSourceView GetView(
string
viewName);
6
ICollection GetViewNames();
7
}
可以看到得到IDataSource对象之后,就可以获得当前绑定的DataSoutceView了。另外当DataBoundControl捕获到IDataSource对象的DataSourceChanged事件后,会主动进行重新绑定。
GetData
从绑定的数据源中获取用于执行数据操作的 DataSourceView对象,通过该对象数据绑定控件可以对数据源进行各种操作,比如Select, Insert还有Update。
2. 页面生命周期
DataBoundControl在页面生命周期中定义了一些时机来进行数据绑定的处理:
OnPagePreLoad
如果是页面进行第一次请求的话,则控件要求进行数据绑定。另外如果是一次PostBack的话,并且控件仍然没有进行数据绑定,同时Enable ViewState,控件也会要求数据绑定。
见下面的代码:
1
protected
override
void
OnPagePreLoad(
object
sender, EventArgs e)
2
{
3
base
.OnPagePreLoad(sender, e);
4
if
(
this
.Page
!=
null
)
5
{
6
if
(
!
this
.Page.IsPostBack)
7
{
8
base
.RequiresDataBinding
=
true
;
9
}
10
else
if
(
base
.IsViewStateEnabled
&&
(
this
.ViewState[
"
_!DataBound
"
]
==
null
))
11
{
12
base
.RequiresDataBinding
=
true
;
13
}
14
}
15
this
._pagePreLoadFired
=
true
;
16
}
这就是为什么在设计时只设置数据绑定控件的DataSourceID,在运行时控件会自动进行数据绑定。
OnLoad
如果说在OnPreLoad阶段没有进行数据绑定的话,在OnLoad阶段控件还会进行检查,并且尝试进行数据绑定如果条件合适的话。
3。小结
DataBoundControl实现了数据绑定控件的基本功能,例如从数据源中获取数据,以及如何操作数据源。其派生类所作的应该是如何展现数据,以及如何利用其提供的接口来操作数据源。
相关示例大家可以参考MSDN文档:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.databoundcontrol.aspx
下一节将会讲述HierarchicalDataBoundControl控件。
Tag标签:
DataBoundControl
posted on 2008-06-16 21:19
ted
阅读(1319)
评论(2)
编辑
收藏
所属分类:
ASP.NET DataBoundControl
FeedBack:
#1楼
2008-06-16 21:59
Yan.Xa [未注册用户]
不错,收藏!
回复
引用
#2楼
2008-06-17 07:02
生鱼片
学习
回复
引用
查看
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
网站首页
新闻频道
社区
小组
博问
网摘
闪存
找找看
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2008-07-23 17:45 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索
相关链接:
所属分类的其他文章:
Inside ASP.NET 2.0 DataBound Control - 3
Inside ASP.NET 2.0 DataBound Control - 2
Inside ASP.NET 2.0 DataBound Control - 1
最新IT新闻:
Silverlight 2正式版SDK可以下载
Silverlight对Flash 微软打垮Adobe
IBM扩大研究规模 在上海成立研究院
eWeek评Google八大“20%项目”
微软终于发布Silverlight 2正式版