ASP.NET控件开发基础(21)

http://tech.ddvip.com   2007年09月02日    社区交流

内容摘要:既然2.0版本已经提供了数据源控件,你是否有想法,让你原有的控件也升级到同时支持通过设置DataSource属性和数据源控件来获取数据源,这样以后我们就可以省省工作了。这次我们就来讨论这个话题,让旧版本的数据绑定控件支持数据源控件。

  请注意ConnectToDataSourceView方法,前后分别在移除和添加一个事件,将RequiresDataBinding属性设置为true重新绑定,然后再看中间这段代码

if (this.currentDataSource == null)
{
  this.currentDataSource = new ReadOnlyDataSource(DataSource, DataMember);
}

  即当未使用数据源控件时,则就从ReadOnlyDataSource对象通过设置DataSource和DataMember属性来获取IDataSource接口,然后才能获取到数据源视图.下面为ReadOnlyDataSource和ReadOnlyDataSourceView的简单实现,在此不做解释.下次再来讲这个东西

public class ReadOnlyDataSource : IDataSource
{
  private string _dataMember;
  private object _dataSource;
  private static string[] ViewNames = new string[0];
  
  event EventHandler IDataSource.DataSourceChanged
  {
    add
    {
    }
    remove
    {
    }
  }
  
  public ReadOnlyDataSource(object dataSource, string dataMember)
  {
    this._dataSource = dataSource;
    this._dataMember = dataMember;
  }
  
  DataSourceView IDataSource.GetView(string viewName)
  {
    IDataSource source = _dataSource as IDataSource;
    if (source != null)
    {
      return source.GetView(viewName);
    }
    return new ReadOnlyDataSourceView(this, this._dataMember, DataSourceHelper.ResolveDataSource(this._dataSource, this._dataMember));
  }
  
  ICollection IDataSource.GetViewNames()
  {
    return ViewNames;
  }
}
  
public class ReadOnlyDataSourceView : DataSourceView
{
  private IEnumerable dataSource;
  
  public ReadOnlyDataSourceView(ReadOnlyDataSource owner, string name, IEnumerable dataSource)
    : base(owner, name)
  {
    this.dataSource = dataSource;
  }
  
  protected override IEnumerable ExecuteSelect(DataSourceSelectArguments arguments)
  {
    arguments.RaiseUnsupportedCapabilitiesError(this);
    return dataSource;
  }
}

责编:豆豆技术应用

正在加载评论...