0

次の2つの架空のクラスを想定しています。

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

ええ、あなたはあなたが表示したい列を手動で設定して指定することができ、あなたのニーズに応じてこのようなものをカスタマイズすることができます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>
于 2013-01-13T07:28:00.343 に答える