【问题标题】:Datagridview and properties to Contained ObjectsDatagridview 和包含对象的属性
【发布时间】:2013-05-13 16:37:01
【问题描述】:

我有一个对象的 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 上

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

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

【问题讨论】:

    标签: c# winforms datagridview .net-2.0


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-27
        • 2012-07-30
        • 1970-01-01
        • 1970-01-01
        • 2018-05-11
        • 2022-07-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多