快速业务通道

ASP.NET自定义控件 第八天 显示多个条目星级评分的列表控件

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
属性 描述 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
  {
   
								
                                
法实现了,通过.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
)

该方法的参数说明如下:

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号