バージョン

FieldLayout の割り当て

FieldLayout は、特定の DataRecord に含まれる Fields (列) を定義します。DataRecord が作成されると、その FieldsDataItem のプロパティに一致する既存の FieldLayout を探して FieldLayouts コレクションで検索が行われます。FieldLayout が見つかった場合、DataRecord と関連付けられます。見つからない場合は、新しい FieldLayout が作成されます。新しい FieldLayout が作成される時には、 FieldLayoutInitializing イベントと FieldLayoutInitialized イベントが発生します。

新しい FieldLayout の AutoGenerateFieldsResolved プロパティが True を返す場合には、データ項目のあらゆるパブリック プロパティに対して Fields コレクションは自動的に Field が格納されます。

Note

注: データ タイプによっては、「Value」という名前の単一のフィールドが代わりに生成されます。これらには、プラス、文字列、小数、DateTime、DayOfWeek、Color などのプリミティブ タイプ、および Visual または Animatable から派生した任意のタイプが含まれます。

Fields の自動生成は、FieldLayoutInitializing イベントと FieldLayoutInitialized イベントの間に実行されます。

Note

注: フィールドの自動生成は、 DataRecordPresenter 内での CellValuePresenters の配置 (レイアウト) の作成に関与する「AutoArrange」機能と混同すべきではありません。'AutoArrange' 機能は、以下の「レコード内にセルを配置」というタイトルの説明されています。

CellValuePresenters の自動生成とビュー依存の配置と組み合わされた Fields の自動生成 (以下に説明) は、最小の労力で、複雑なデータ ソースにバインドして、データを表示/編集するための堅牢な UI を表示するための非常に優れた「ノータッチ」配備ソリューションを提供します。

次に、さまざまな FieldLayout を DataRecord に割り当てることを可能にするために AssigningFieldLayoutToItem イベントが発生します。最後に、 InitializeRecord イベントが発生します。

派生したレコード タイプ固有のプロパティにアクセス

InitializeRecord イベントが DataRecords、 GroupByRecords および ExpandableFieldRecords に発生するため、 InitializeRecordEventArgs は基本の Record クラスを返すプロパティを公開します。したがって、派生した Record タイプのひとつに固有のプロパティにアクセスするためには、以下の例のコードに示すように、適切なタイプにキャストする必要があります。

private void OnInitializeRecord(object sender, InitializeRecordEventArgs e)
{
        DataRecord dr = e.Record as DataRecord;
        if (dr != null)
        {
                Cell cell = dr.Cells["CustomerName"];
        }
}

手動でフィールドを追加

以下の例の XAML は、 AutoGenerateFields 機能を使用する代わりに手動でフィールドを追加する方法を示します。追加のバインドされないフィールドを追加する方法も示します。

<igDP:XamDataGrid>
        <igDP:XamDataGrid.FieldLayoutSettings>
                <igDP:FieldLayoutSettings
                  AutoGenerateFields="False"/>
        </igDP:XamDataGrid.FieldLayoutSettings>
        <igDP:XamDataGrid.FieldLayouts>
                <igDP:FieldLayout>
                        <igDP:FieldLayout.Fields>
                                <igDP:Field Name="CustomerName" Label="Customer Name"/>
                                <igDP:Field Name="Address"/>
                                <igDP:Field Name="City"/>
                                <igDP:Field Name="MyExtraDataColumn" BindingType="Unbound"
                                  DataType="{x:Type sys:Decimal}"/>
                        </igDP:FieldLayout.Fields>
                </igDP:FieldLayout>
        </igDP:XamDataGrid.FieldLayouts>
</igDP:XamDataGrid>
Note

上記の例の XAML コードでは、AutoGenerateFields プロパティがデフォルト値の True のままだった場合には、xamDataPresenter は DataRecord にある追加のパブリック プロパティのために Fields を生成して、コレクションの最後に追加します。thefCustomerName フィールドが最初のフィールドとして手動で定義されたために、デフォルトで「主要」フィールドと見なされることに注意してください。主要フィールドは、 レコード内にセルを配置トピックで説明したように、AutoArrange 機能を使用する時に特別な処理を受け取ります。