所以我目前有两个对象。
对象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 对象(我什至交换了他们的名字和姓氏的位置并且它有效),但宠物的列不起作用。
所以我想知道为什么会这样?
顺便说一句,是否还有一种方法可以使列可排序?
最简单的方法是在 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 排序?