FlexGrid for WinForms
データ注釈
> データ注釈

データ注釈とは、クラスなどのオブジェクトに意味のあるメタデータタグを追加することです。これにより、データ検証を実行したり、適切なメッセージをエンドユーザーに表示することで、モデルとビューの間のギャップを簡単に埋めることができます。たとえば、項目をどのように書式設定する必要があるか、どのようなキャプションを付けるべきか、編集可能にするかどうかなどを指定するために、データ注釈を使用できます。

データ注釈

FlexGrid は複数のデータ注釈属性をサポートしており、データクラスのカスタマイズ、ソースからのデータの表示、および検証ルールの設定に使用されます。これらの属性をプロジェクトで使用するには、まず System.ComponentModel.DataAnnotations アセンブリへの参照を追加し、次にコードでこれらの属性をデータオブジェクトに追加する必要があります。

メモ: C1FlexGrid は .NET 4 で定義された注釈をサポートします。System.ComponentModel.DataAnnotations はバージョン 4.0.0.0 以上である必要があります。

以下に、FlexGrid コントロールでサポートされている主な注釈属性をリストします。DataAnnotation 属性の完全なリストについては、ここをクリックしてください。

属性名 FlexGrid での機能
Association エンティティメンバが外部キーリレーションなどのデータリレーションを表すことを指定します。
Display エンティティ部分クラスの型やメンバに対してローカライズ可能な文字列を指定できる汎用属性を提供します。
DisplayFormat ASP.NET Dynamic Data によるデータフィールドの表示方法と書式設定方法を指定します。
DisplayColumn 参照されるテーブルで外部キー列として表示される列を指定します。
Editable データフィールドが編集可能かどうかを示します。
Key エンティティを一意に識別する 1 つ以上のプロパティを示します。

Validation

  • RequiredAttribute
  • StringLengthAttribute
  • RangeAttribute
  • RegularExpressionAttribute
  • MinLengthAttribute
  • MetaDataAttribute
  • MaxLengthAttribute
  • EmailAddressAttribute
  • CompareAttribute
  • DataTypeAttribute
データ注釈の検証属性は、FlexGrid の操作で検証ルールとして使用されます。

次のコード例では、WinForms FlexGrid コントロールでデータ注釈機能がどのように動作するかを示します。

// 自動生成されたCustomerName列ヘッダに「Customer」と表示されます
// この列には、少なくとも2つの記号の長さが最小の空でない文字列も必要です

[Display(Name = "Customer")]
[Required]
[StringLength(int.MaxValue, MinimumLength = 2)]

public string CustomerName { get; set; }
// 自動生成されたCustomerID列は非表示になります
[Display(AutoGenerateField = false)]
public int CustomerID { get; set; }
// 自動生成された「Frequency」列には、パーセンテージで書式設定された値が表示されます
// また、編集を許可しません

[DisplayFormat(DataFormatString = "0%")]
[Editable(false)]
public double Frequency { get; set; }
// 自動生成された「Age」列は、事前定義された範囲の値を許可します

[Required]
[Range(10, 90)]
public int Age { get; set; }
// サンプルデータを作成します
public static BindingList<Data> GetSampleData(int cnt)
{
    var list = new BindingList<Data>();
    var rnd = new Random();
    for (int i = 0; i < cnt; i++)
    {
       var item = new Data();
       item.CustomerName = _firstNames[rnd.Next(0, _firstNames.Length)] + " " + _lastNames[rnd.Next(0, _lastNames.Length)];
       item.CustomerID = i;
       item.Frequency = rnd.NextDouble();
       item.Age = rnd.Next(10, 91);
       list.Add(item);
    }
       return list;
}             
    ' 自動生成されたCustomerName列ヘッダに「Customer」と表示されます
    ' この列には、少なくとも2つの記号の長さが最小の空でない文字列も必要です
    <Display(Name:="Customer")>
    <Required>
    <StringLength(Integer.MaxValue, MinimumLength:=2)>
    Public Property CustomerName As String
    ' 自動生成されたCustomerID列は非表示になります
    <Display(AutoGenerateField:=False)>
    Public Property CustomerID As Integer
    ' 自動生成された「Frequency」列には、パーセンテージで書式設定された値が表示されます
    ' また、編集を許可しません
    <DisplayFormat(DataFormatString:="0%")>
    <Editable(False)>
    Public Property Frequency As Double
    ' 自動生成された「Age」列は、事前定義された範囲の値を許可します
    
    <Required>
    <Range(10, 90)>
    Public Property Age As Integer

    ' サンプルデータを作成します
    Public Shared Function GetSampleData(ByVal cnt As Integer) As BindingList(Of Data)
        Dim list = New BindingList(Of Data)()
        Dim rnd = New Random()

        For i As Integer = 0 To cnt - 1
            Dim item = New Data()
            item.CustomerName = _firstNames(rnd.[Next](0, _firstNames.Length)) & " " + _lastNames(rnd.[Next](0, _lastNames.Length))
            item.CustomerID = i
            item.Frequency = rnd.NextDouble()
            item.Age = rnd.[Next](10, 91)
            list.Add(item)
        Next

        Return list
    End Function          
関連トピック