1. 引言
前几次任务里我们开发的星级控件只能显示一个条目的评分,在现实生活中, 经常会遇到需要向用户展示一系列数据的评分状态,例如下图所示:
列表控件-">
本次任务里,我们将一起开发这样一个控件。
广告时间——最近在尝试写英文文章,申请了一个英文博客www.dev6.cn,欢 迎大家留下墨宝
2. 分析
通过上图可以看到,该自定义控件是一系列数据评分等级的列表,很显然需要 作为一个数据绑定控件来实现才可以灵活的显示多条数据,并且在该列表上方显 示了标题和当前的日期,为了允许用户灵活的定义标题和二级标题(当前日期) ,有必要引入模版的概念,由用户编辑模版,最终按照模版内容显示。如此看来 再使用DataBoundControl作为自定义控件的基类就不太适合了,因为我们要在该 控件中包含多个子控件,那么我们应该选择哪个类作为基类?
回忆一下第六天的任务中数据绑定控件的类关系图,其中有一个继承自 DataBoudControl类的CompositeDataBoundControl类,该类是.NET Framework 2.0中新增的一个类,用作绑定到数据源中的数据服务器控件的基类,该定义定义 如下:
public abstract class CompositeDataBoundControl : DataBoundControl, INamingContainer
可以看到,该在只是在继承DataBoundControl类的基础上实现了 INamingContainer,这意味着该类所包含的子控件都会生成唯一的ID属性。
但是CompositeDataBoundControl是如何实现数据绑定的呢,换句话说,如果 某一个页面包含了一个复杂数据绑定控件,在某一个服务器端控件引起回发后, 如何确保数据绑定控件能正确的被填充呢?按照设计,ASP.NET中的数据绑定组合 控件只能从数据绑定中获取数据,并且不会缓存任何绑定的数据,因此,需要提 供一个特殊的方法来处理回发事件。
再次回顾一下DataBoundControl这个类,我们来分析一下数据是如何被显示出 来的。在DataBoundControl类上重载了BaseDataBoundControl类上定义的 PerformSelect方法,该方法如下所示:
protected override void PerformSelect() { if (this.DataSourceID.Length == 0) { this.OnDataBinding(EventArgs.Empty); } DataSourceView data = this.GetData(); this._arguments = this.CreateDataSourceSelectArguments(); this._ignoreDataSourceViewChanged = true; base.RequiresDataBinding = false; this.MarkAsDataBound(); data.Select(this._arguments, new DataSourceViewSelectCallback(this.OnDataSourceViewSelectCallback)); }
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数据
, 控件
, this
, 控件任务
, 一个
, 模版
, angularjs等级评分
, 星级评分
, 评分控件
, js星级评分
, 评分
, jQuery星级评分
自定义评分条
,以便于您获取更多的相关知识。