バージョン 24.2 (最新)

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 機能を使用する時に特別な処理を受け取ります。