C# 如何在 datagridview 中显示对象列表,每个对象都有另一个对象作为属性?

问题描述 投票:0回答:1

所以我目前有两个对象。

对象A

public class Person
{

    public string FirstName { get; set; }
    public string LastName { get; set; }
    public Pet MyPet  { get; set; }
}

和对象 B

public class Pet
{
    public string Name { get; set; }
    public string Animal  { get; set; }
}

然后我创建了 2 个 Person 对象和 2 个 Pet 对象。

Pet myDog = new Pet("Fluffy", "Dog");
Person A = new Person("John", "Smith", myDog);
Pet myCat = new Pet("Furball", "Cat");
Person B = new Person("Jane", "Doe", myCat);

然后,我将 Person A 和 Person B 添加到 Person 对象列表中,并将该列表作为我的数据网格的数据源。

结果并不是我们想要的。数据网格自动将列填充为 FirstName、LastName 和 MyPet,而不是还包括 Name 和 Animal。此外,虽然 FirstName 和 LastName 列正确显示了两个人的名字,但 MyPet 显示

TestDemo.Pet
,而不是对象名称、名称或动物。

因此,我进行了一些挖掘,并使用设计器添加了列本身,并使它们的 DataPropertyName 与它们在类中的命名方式相对应。虽然他们确实正确填写了 Person 对象(我什至交换了他们的名字和姓氏的位置并且它有效),但宠物的列不起作用。

所以我想知道为什么会这样?

顺便说一句,是否还有一种方法可以使列可排序?

c# winforms datagridview
1个回答
0
投票

最简单的方法是在 Person 类中添加两个属性:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    [Browsable(false)]
    public Pet MyPet { get; set; }

    public string PetName => MyPet.Name;
    public string PetAnimal => MyPet.Animal;
}

您可以使用

BrowsableAttribute
隐藏 MyPet 属性。

要使列可排序,请检查此问题:当用户单击列标题时如何启用 DataGridView 排序?

© www.soinside.com 2019 - 2024. All rights reserved.