ASP.NET自定义控件 第八天 显示多个条目星级评分的列表控件
法实现了,通过.NET Reflection工具观察 CompositeDataBindControl类上该方法的实现:
protected internal override void CreateChildControls() { this.Controls.Clear(); object obj2 = this.ViewState["_!ItemCount"]; if ((obj2 == null) && base.RequiresDataBinding) { this.EnsureDataBound(); } if ((obj2 != null) && (((int)obj2) != -1)) { DummyDataSource dataSource = new DummyDataSource((int)obj2); this.CreateChildControls(dataSource, false); base.ClearChildViewState(); } } CreateChildControls方法有两种工作模式:绑定模式和非绑定模式。 在绑定模式下,将会正常创建控件树,具体来说会在执行PerformDataBinding 方法中调用重载的CreateChildControls方法,以手动的实现数据控件层次的创建 ; protected internal override void PerformDataBinding(IEnumerable data) { base.PerformDataBinding(data); this.Controls.Clear(); base.ClearChildViewState(); this.TrackViewState(); int num = this.CreateChildControls(data, true); base.ChildControlsCreated = true; this.ViewState["_!ItemCount"] = num; } 而在非绑定模式中,将从CreateChildControls方法中调用带有两个参数的重 载: DummyDataSource dataSource = new DummyDataSource((int) obj2); this.CreateChildControls(dataSource, false); base.ClearChildViewState(); 在这种情况下,传递给CreateChildControls方法的第二个参数为false,这表 示不会向控件层次添加任何数据。ASP.NET回发机制确保每一个子控件正确的从视 图中恢复自己的值。 接下来观察在CompositeDataBindControl类上定义的CreateChildControls方 法的重载: protected abstract int CreateChildControls ( IEnumerable dataSource, bool dataBinding ) 该方法的参数说明如下: 属性 描述 Attribute 在最终的标记中,该属性永久存储为一个已编码的HTML特性 EncodedInnerDefaultProperty 该属性存储为该控件的内部文本。该属性的值是编码的HTML,只能将 字符串赋给该属性 InnerDefaultProperty 永久存储为控件中的内部文本的属性并且是元素的默认属性,只有一 个属性能够指定为默认属性 InnerProperty 该属性永久存储为控件中的一个嵌入标记,这是使用模版和风格的复 杂对象常用的一个属性。模版属性示例如下所示: private ITemplate _titleTemplate; [PersistenceMode(PersistenceMode.InnerProperty)] [TemplateContainer(typeof(TitleTemplateContainer))] public ITemplate TitleTemplate { get { return _titleTemplate; } set { _titleTemplate = value; } } 3. 实现 3.1 在解决方案ControlLibrary类库中创建BarChartItem类用于表示控件项: using System; using System.Collections.ObjectModel; using System.Web.UI; using System.Web.UI.WebControls; public class BarChartItem:TableRow { public BarChartItem(BarChartItemType itemType) { ItemType = itemType; } public BarChartItemType ItemType { get; set; } public object DataItem { |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |