记录Harde学习成长生活的点点滴滴.
« »
2009-09-29
DotNet

844 次浏览

解决C# 自定义控件数据源绑定的问题

每次做同样的事的确很麻烦,今天就单独拿出时间做了个自定义控件,
不过刚写道“属性”这我就卡壳了…无他 数据源的问题…
不是BindingSource类型…
晕了…无奈MSDN吧…..
找了半天终于翻出来了
AttributeProviderAttribute 类
MSDN:ms-help://MS.MSDNQTR.v90.chs/fxref_system/html/fdad4c93-2653-5b58-9de8-16d07107e47d.htm
备注是这样写的

在 .NET Framework 对象模型中,有些情况下会有意将属性类型化为模糊的。例如,将 DataGridView..::.DataSource 属性类型化为 object。之所以这样,是为了让此属性可以接受多种类型的输入。遗憾的是,这样做并未提供添加元数据以描述属性特性的通用方法。对于需要元数据的类型转换器、UI 类型编辑器和其他服务,.NET Framework 中的每个 DataSource 属性都需要具有相同的元数据。AttributeProviderAttribute 对此情况进行了补救。

此属性 (Attribute) 一旦被置于属性 (Property) 上,用于获得属性 (Property) 描述符的 MemberDescriptor..::.Attributes 集合的属性 (Attribute) 的规则就会有所不同。通常,属性 (Property) 描述符收集本地属性 (Attribute),然后再将其与来自属性 (Property) 类型的属性 (Attribute) 进行合并。在此情况下,将从 AttributeProviderAttribute 所返回的类型中而不是从实际属性 (Property) 类型获取属性 (Attribute)。此属性 (Attribute) 用在 DataGridView..::.DataSource 中,以使 DataGridView..::.DataSource 对象的特定类型指向 IListSource,并且相应的元数据放在 IListSource 中,以启用数据绑定。在这种情况下,可以从外部轻松地向所有数据源添加元数据。

在属性 (Property) 类型的属性 (Attribute) 和属性 (Property) 上的属性 (Attribute) 之间,从 AttributeProviderAttribute 中声明的类型中获取的属性 (Attribute) 优先。下面的列表按优先级顺序显示可用的已合并属性 (Attribute) 的全集:

属性 (Property) 的属性 (Attribute)

属性提供程序属性

属性 (Property) 类型的属性 (Attribute)

底下也给出代码

?View Code CSHARP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Category("Data")]
[Description("Indicates the source of data for the control.")]
[RefreshProperties(RefreshProperties.Repaint)]
[AttributeProvider(typeof(IListSource))]
public object DataSource
{
    get
    {
        return this.dataGridView1.DataSource;
    }
 
    set
    {
        this.dataGridView1.DataSource = value;
    }
}

试了下
完美解决
Datasource

日志信息 »

该日志于2009-09-29 09:25由 harde 发表在DotNet分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。

相关日志 »

没有评论

发表评论 »

使用新浪微博登陆

返回顶部
分享按钮