0

我有一个对象的 BindingList。这些对象包含要由数据绑定视图显示的公共属性。不幸的是,我无法让返回包含对象的字段数据的属性起作用。以下面的人为示例为例:

Public Class ChimpDiet
{
  public string favoritefood;
}


Public Class Chimpanzee
{
  private ChimpDiet diet;

  [DisplayName("Chimp's favorite food")]
  public string favoritefood
  { get { return diet.favoritefood; } }

  [DisplayName("Chimp's nickname")]
  public string nickname { get; set; }

  public Chimpanzee()
  {
    diet = new ChimpDiet();
  } 
}

当我将黑猩猩的 BindingList 设置为 datagridview 的数据源时,属性 favoritefood 会导致错误弹出:

DataGridView 中发生以下异常:
System.Reflection.TargetInvocationException:属性访问器......抛出以下异常:'对象引用未设置为对象的实例......'......

确保始终在容器对象的构造函数中创建实例,但这并不能解决问题。有什么建议么?这是在 Net 2.0 上

ps数据由网格显示,只是这个错误不断弹出,说引用没有设置为实例,即使它显然是。这一定是winforms的问题。

更新:将 ChimpDiet 从一个类更改为一个结构可以消除错误。但我需要它成为一堂课。这对我来说毫无意义。

4

2 回答 2

0

好的,事实证明 DataGridView 希望包含的对象具有一个默认构造函数(无参数),该构造函数初始化其字段数据的每一个。我不知道究竟是为什么(如果有人可以对此有所了解,请这样做)但我的程序现在正在运行,就是这样。

于 2013-05-18T18:11:06.173 回答
0

那是因为您的属性之一是返回 class 的属性ChimpDiet。如果没有事先初始化它,当DataGridView它试图显示值时它会厌倦访问diet.favoritefood,当diet它为 null 时它会抛出异常。

于 2013-05-18T18:52:55.160 回答