[英]How to configure data in DataGridView (C#)
我有 DataGridView,对于 DataSource,它是一个设备列表。 设备有一个类别,我想知道如何在 DataGridView 中显示类别的属性(目前它使用 ToString() 来显示它)。
public class Device
{
public int Id { get; }
public string Name { get; set; }
public Category Category {get; set; }
}
public class Category
{
public int Id { get; }
public string Name { get; }
}
在我的表格中:
List<Device> devices = (...); //load my devices
myDataGridView.DataSource = devices;
因此,在我的 DataGridView 中,它将显示 Category.ToString() 但我希望它单独显示类别的属性。
如果我理解正确,您只需要将正确的属性绑定到 XAML 中。 举个简单的例子,如果列表被定义为 DataSource :
<DataGrid Name="yourName" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Device ID " Binding="{Binding Id}" />
<DataGridTextColumn Header="Device Name" Binding="{Binding Name}" />
<DataGridTextColumn Header="Category ID" Binding="{Binding Category.Id}" />
<DataGridTextColumn Header="Category Name" Binding="{Binding Category.Name}" />
</DataGrid.Columns>
</DataGrid>
希望它会帮助你!
不幸的是, DataGridView
不会知道如何处理“类”中的“类”。 如果将“List”作为“设备”类的属性,则应用相同的想法。 网格将把类/列表解释为“多个”对象,它不会将这些对象“解析”到单独的列中。 第三方网格可能会这样做。
我不会争辩说,如果 Class 只有单个非集合类型的对象,它会进行这种简单的解析……不幸的是,开箱即用的DataGridView
不会为您执行此操作。 您的代码将不得不“扁平化”数据以使其全部显示在网格中。
正如您所评论的,一个简单的解决方法是覆盖 Category 的ToString
方法以返回一个字符串,其中“两个”值都连接在一起。 这将返回数据,但正如您所指出的,“两个”值都将位于“单个”列中。
public class Category {
public int Id { get; }
public string Name { get; }
public Category(int id, string name) {
Id = id;
Name = name;
}
public override string ToString() {
return Id + ", " + Name;
}
}
鉴于此,我猜想编写一种方法来“展平”数据并返回包含所有字段的DataTable
可能会更容易。 但是,鉴于只有两 (2) 个字段, Device
类也可能具有Category
属性。 例如,如果你使Device
类的Category
属性private
然后暴露Cataegory
中的两个属性Device
类。 就像是…。
class Device {
public int Id { get; }
public string Name { get; set; }
private Category _Category { get; set; }
public Device(int id, string name, Category category) {
Id = id;
Name = name;
_Category = category;
}
public int CatID {
get {
return _Category.Id;
}
}
public string CatName {
get {
return _Category.Name;
}
}
}
我打赌一种专门的方法来“展平”数据并返回一个DataTable
将是一种更好的方法,但是如前所述,由于只有两个字段,因此上述解决方案应该有效。
希望这是有道理的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.