0

假设以下两个虚构类:

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 对象的实例,并考虑以下注意事项:

  • ID 应该是只读的
  • 工资应格式化为货币
  • 不应显示 SSN

我知道如何用样式和模板做一些非常简单的事情,但我似乎找不到任何关于使用它们来指示 DataGrid 应该如何显示数据的好信息。如何执行上述操作的示例会很棒,并且任何指向此主题的良好资源的链接将不胜感激。

4

2 回答 2

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; }
}

每当您自动生成字段时,都会使用此信息。您甚至可以创建字段组以将它们分组到选项卡等中。

希望这是您正在寻找的答案。

于 2013-01-13T18:05:56.667 回答
0

是的,您可以手动设置AutoGenerateColumnsFalse指定要显示的列,并可以根据您的需要对其进行自定义,如下所示 -

    <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>
于 2013-01-13T07:28:00.343 回答