数据绑定到一个自定义的控制

问题描述:

我有以下的C#Windows窗体(.NET 4.0)的情况应用:数据绑定到一个自定义的控制

我有一个数据源设置为自定义类的对象的集合的BindingSource。

该类的大多数属性都可以用文本框或复选框表示,因为它们是字符串或数字或布尔值。 但是,有一个属性称为Ratings,它是另一个自定义对象,必须由我开发的自定义控件来表示。

我绑定了一个datagridview到绑定源,显然dgview正确显示数字,字符串和布尔值。但是在同一个表单上,我也有一个我开发的自定义控件的实例,所以我想现在要做的就是将自定义控件绑定到与datagridview使用的绑定源相同的绑定源,并绑定到名为Ratings的特定数据库。但我对如何开始没有丝毫的线索。我怀疑我必须实现一些在我的控件上实现DataSource和DataMember的接口,但不知道从哪里开始。所以基本上我想要的是每次通过在datagridview中选择另一行来更改所选项目时,相应的Ratings属性在自定义控件中表示。

现在,我想实现的是工作,但我每个DataGridView中的OnSelectedRowChanged事件被烧成时间刷新我的自定义控制,以及相关联的选择项的评级属性自定义的控制做到这一点endresult。

但我想知道如果我可以完全通过.NET中的数据绑定机制。

感谢您的回复!

马修

PS:以进一步澄清,因为似乎它不以纯文本,以便清楚:

表示我作为数据源使用的BindingSource的对象伪代码是:

public class Car 
{ 

    private string number; 
    private string name; 
    ... 
    private Ratings ratings; 


    public string Number 
    { 
    get { return this.number; } 
    set { this.number = value; } 
    } 

    public string Name 
    { 
    get { return this.name; } 
    set { this.name = value; } 
    } 

    ... 

    public Ratings Ratings 
    { 
    get { return this.ratings; } 
    set { this.ratings = value; } 
    } 

} 

所以我想从绑定源的所有字符串和数字属性绑定到datagridview,但我需要将属性绑定到自定义控件。

我明白你想在你的自定义控件的DataGridView中有一个特殊的列。为此,您需要创建DataGridViewCell和DataGridViewColumn的子类并实现IDataGridViewEditingControl。

查看MSDN举例。

+0

不,如果不明确,不好意思。这不是DataGridView中我想要的特殊列。我有一个完全独立的自定义控件,我用它来表示Ratings属性。与DataGridView无关。基本上我希望对象的所有属性绑定到DataGridView(现在就是这种情况),但需要绑定到自定义控件的Ratings属性除外。 – tjeuten 2010-09-13 12:30:47

+0

我在我的问题中发布了一些代码,希望能够更加清楚 – tjeuten 2010-09-13 12:39:31

+0

因此,您有一个明细表单,您希望显示评分,并希望网格视图的当前项目在此自定义控件中显示其评分。 – Timores 2010-09-13 12:48:22

你可以阅读这篇微软有关interfaces related to data binding的文章。您感兴趣的内容位于“组件作者实现接口”一节的底部。