假设以下两个虚构课程:
public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public decimal Salary { get; set; }
public string SSN { get; set; }
}
public class People: ObservableCollection<Person> {}
假设我想在DataGrid中显示People对象的实例,并考虑以下因素:
我知道如何使用样式和模板做一些非常简单的事情,但我似乎找不到任何关于使用它们来指示DataGrid应该如何显示数据的好信息。如何做到这一点的一个例子将是很好的,并且将赞赏关于该主题的良好资源的任何链接。
答案 0 :(得分:1)
我认为您正在System.ComponentModel.DataAnnotations命名空间中查找DisplayAttribute。您可以指定是否显示字段,列标题,列顺序等。您可以在每个字段中使用多个注释。
在您的示例中,您需要以下内容:
using System.ComponentModel.DataAnnotations
public class Person
{
[Editable(false)]
[Display(Name = "Person ID", Order = 0)]
public int Id { get; set; }
[MaxLength(30, ErrorMessage = "too long!")]
[Display(Name = "First Name", Order = 10)]
public string FirstName { get; set; }
[Display(Name = "Last Name", Order = 20)]
public string LastName { get; set; }
[DisplayFormat(DataFormatString="C")]
[Display(Name = "$/year", Order = 30)]
public decimal Salary { get; set; }
[Display(AutoGenerateField=false)]
public string SSN { get; set; }
}
只要您自动生成字段,就会使用此信息。您甚至可以创建字段组以将它们分组到选项卡等。
希望这是您正在寻找的答案。
答案 1 :(得分:0)
是的,您可以将AutoGenerateColumns
设置为False
并手动指定要显示的列,并可根据您的需要自定义此类 -
<DataGrid ItemsSource="{Binding People}"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Id}" IsReadOnly="True"/>
<DataGridTextColumn Binding="{Binding FirstName}"/>
<DataGridTextColumn Binding="{Binding LastName}"/>
<DataGridTextColumn Binding="{Binding Salary, StringFormat=C}"/>
</DataGrid.Columns>
</DataGrid>