2013-05-18 67 views
0

我有一个BindingList对象。这些对象包含要通过数据绑定视图显示的公共属性。不幸的是,我无法获得返回包含对象的字段数据的属性。就拿下面的人为的例子:Datagridview和包含对象的属性

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:属性访问.... 发生以下异常:“对象引用不设置为一个对象.'.....

M的一个实例确保一个实例总是在容器对象的构造函数中创建,但这不能解决问题。有什么建议么?这是网2.0上

p.s.数据由网格显示,只是这个错误不断弹出,表示引用没有设置为实例,即使它显然是。这必须是一个winforms问题。

UPDATE:将ChimpDiet从一个类更改为一个结构体将删除错误。 但我需要它是一个班级。这对我来说没有意义。

回答

0

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

0

这是因为您的某个属性正在返回类ChimpDiet的属性。当DataGridView试图显示它的价值时,它没有初始化它轮胎访问diet.favoritefood,当diet为空它会抛出异常。

相关问题