【问题标题】:Databinding to a custom control数据绑定到自定义控件
【发布时间】:2010-09-13 12:01:40
【问题描述】:

我在 C# Windows Forms (.NET 4.0) 应用程序中遇到以下情况:

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

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

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

现在我希望实现的最终结果正在工作,但我通过在每次触发 datagridview 的 OnSelectedRowChanged 事件时刷新我的自定义控件,并将所选项目的 Ratings 属性与自定义控件相关联来做到这一点。

但我想知道我是否可以完全通过 .NET 中的数据绑定机制来实现这一点。

感谢您的回复!

马修

ps:进一步澄清,因为在纯文本中似乎不太清楚:

代表我用作绑定源数据源的对象的伪代码是:

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; }
   }

}

所以我希望将 bindingsource 中的所有字符串和数字属性绑定到 datagridview,但我需要 Ratings 属性才能绑定到自定义控件。

【问题讨论】:

    标签: c# data-binding custom-controls


    【解决方案1】:

    我了解到您希望在 DataGridView 中有一个带有自定义控件的特殊列。为此,您需要创建 DataGridViewCell 和 DataGridViewColumn 的子类并实现 IDataGridViewEditingControl。

    有关示例,请参阅 MSDN

    【讨论】:

    • 不,如果不清楚,抱歉。这不是我想要的 DataGridView 中的特殊列。我有一个完全独立的自定义控件,用于表示 Ratings 属性。与 DataGridView 无关。基本上我希望对象的所有属性都绑定到 DataGridView(现在就是这种情况),但 Ratings 属性除外,它需要绑定到自定义控件。
    • 我在我的问题中发布了一些代码,希望它更清楚
    • 那么,您有一个详细的表单,希望在其中显示评分,并且希望网格视图的当前项目在此自定义控件中显示其评分?
    • 这个问题stackoverflow.com/questions/245441/…可能对你有用。
    • 感谢您的链接。如果我理解正确,因为我需要将我的自定义控件绑定到单个对象(作为我的 Car 类的 Ratings 属性),我需要使用简单绑定技术。这与用于绑定对象列表的复杂绑定相反,对吧?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2010-10-11
      • 2015-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      相关资源
      最近更新 更多