public class SampleSalesPerson
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Territory { get; set; }
public int Sales { get; set; }
}
このトピックでは、XamDataGrid コントロールの作業で使用できる、サポートされている列タイプと一般的な列の操作を分かりやすく説明し、理解を深めることができるようにします。
このトピックは、以下のセクションで構成されます。
本トピックの理解を深めるために、以下のトピックを参照することをお勧めします。
このプロパティを使用すると、割り当てられたデータ ソースに存在するデータのカテゴリごとに、グリッドが自動的に列を作成するかどうかを設定できます。
XamDataGrid コントロールは、デフォルトでは公開されている基本データに基づき、自動的に適切な列のタイプを決定して、データ項目のプロパティの型ごと(またはパブリック プロパティごと)に列を作成します。たとえば、「 XamDataGrid を使用した作業の開始」のトピックで使用される SampleSalesPerson クラスでは、ビュー内でパブリック プロパティが使用されています。
C# の場合:
public class SampleSalesPerson
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Territory { get; set; }
public int Sales { get; set; }
}
FirstName、LastName、Sales、および Territory という 4 つのパブリック プロパティがあることに注意してください。XamDataGrid コントロールは、これらの各プロパティのデータ型に基づき列を作成します。この処理をさらに概念化してみましょう。たとえばいくつかの SampleSalesPerson オブジェクトを作成してリストに追加した場合に、各 SampleSalesPerson オブジェクトには、FirstName、LastName、Sales、および Territory プロパティに一意の値が割り当てられているとします。
これを前提とすると、次に示すコードのように、このリストは XamDataGrid コントロールの ItemsSource として割り当てられ、XamDataGrid コントロールの AutoGenerateColumn プロパティには、パラメーターとしてブール値 True が渡されます。
XAML の場合:
<ig:XamDataGrid x:Name="DataGrid" AutoGenerateColumns="True" />
XamDataGrid コントロールは、データ型に基づき適切なタイプの個別の列を 4 つ作成し、各プロパティの名前をそれに関連付られた列の名前として使用します。
結果の XamDataGrid は、次のスクリーンショットのようになります。
XamDataGrid コントロールを使用すると、手動で列を定義できます。これにより、列の表示方法を完全に制御できます。
この動作が使用されるシナリオは 2 つあります。
XamDataGrid コントロールが特定のタイプのデータの列のみを作成するようにする場合。
XamDataGrid コントロールが自動的に作成する列の選択に、特定の列タイプのみが使用されるようにする場合。
デフォルトでは、XamDataGrid コントロールはデータに基づき、すべての列を自動的に作成します。ただし、使用する列のタイプを明示的に選択するオプションも用意されています。
以下のコード例は、XamDataGrid コントロールの TextColumn および NumericColumn を手動で定義する方法を示します。ただし、任意のサポートされる列タイプに同じロジックを使用できます。
この例は、SampleSalesPerson クラスを 4 パブリック プロパティ (FirstName、LastName、Sales、Territory) を持つデータ項目の実装に使用しています。ただし、基になるデータ項目の 4 つのプロパティすべての列を自動生成するデフォルトの動作とは対照的に手動で 3 つのプロパティ (FirstName、LastName、Sales) のみの列を定義します。
XamDataGrid コントロールの AutoGenerateColumns プロパティを使用して列の自動生成を無効にします。
XAML の場合:
<ig:XamDataGrid x:Name="DataGrid" AutoGenerateColumns="False" />
C# の場合:
DataGrid.AutoGenerateColumns = false;
文字列プロパティのための TextColumn
の 2 つのインスタンス、そして数値プロパティのための NumericColumn
の 1 つのインスタンスを作成します。
XAML の場合:
<ig:XamDataGrid.Columns>
<ig:TextColumn PropertyPath="FirstName" />
<ig:TextColumn PropertyPath="LastName" />
<ig:NumericColumn PropertyPath="Sales" />
</ig:XamDataGrid.Columns>
C# の場合:
TextColumn column1 = new TextColumn();
column1.PropertyPath = "FirstName";
TextColumn column2 = new TextColumn();
column2.PropertyPath = "LastName";
NumericColumn column3 = new NumericColumn();
column3.PropertyPath = "Sales";
DataGrid.Columns.Add(column1);
DataGrid.Columns.Add(column2);
DataGrid.Columns.Add(column3);
アプリケーションを実行します。XamDataGrid コントロールは 2 つの TextColumn
タイプと 1 つの NumericColumn
タイプを表示します。
1 つまたは複数の列に使用された特定の列タイプのみを制御し、残りの列は XamDataGrid コントロールで自動的に作成する場合があります。次の手順では、使用する列タイプのみ明示的な制御が必要な場合に、手動でそれらの列を定義する方法を順を追って説明します。
これらの手順では、Sales データに使用される数値の TextColumn
を追加します。この場合、これらの値は文字列データ型に変換され、TextColumn
内でレンダリングされます。
XamDataGrid コントロール オブジェクトがインスタンス化された場所の後に、自動的に列を作成するために次のコードを追加します。
XAML の場合:
<ig:XamDataGrid x:Name="DataGrid" AutoGenerateColumns="True" />
C# の場合:
DataGrid.AutoGenerateColumns = true;
数値 "Sales" プロパティにマップして TextColumn のインスタンスを作成し、デフォルトの NumericColumn
を TextColumn
タイプでオーバーライドします。
XAML の場合:
<ig:XamDataGrid.Columns>
<ig:TextColumn PropertyPath="Sales" HeaderText="Sales (As Text)" />
</ig:XamDataGrid.Columns>
C# の場合:
TextColumn column1 = new TextColumn();
column1.PropertyPath = "Sales";
column1.HeaderText = "Sales (As Text)";
DataGrid.Columns.Add(column1);
アプリケーションを実行します。XamDataGrid コントロールは、数値プロパティ Sales も含め 4 つの TextColumn オブジェクトを表示します。
表示された Sales 列は、前述の手順で作成した TextColumn
を使用し、XamDataGrid コントロールのデフォルトの動作を上書きします。デフォルトでは、このデータ型に NumericColumn
が作成されますが、このコンテキストでは、2 つの列タイプは表示上の区別ができません。
FirstName 列、LastName 列、と Territory 列は、 AutoGenerateColumns プロパティを使用して、基本データの残りのプロパティに基づいて XamDataGrid コントロールが自動的に作成します。
いくつかの共通の列操作を簡素化するメソッドが XamDataGrid コントロールから公開されています。このようなメソッドには、列の追加、削除、挿入、交換、および非表示があります。このセクションでは、例を示してこれらのメソッドの使用方法を詳しく説明します。
次の例では、列の論理インデックスと表示上のインデックスが同じであるため、XamDataGrid コントロールの Column コレクション内で基本の列に変更を加えると、その変更が XamDataGrid コントロールの UI にすぐに反映されます。
XamDataGrid コントロールを使用すると、手動で定義した列に動的に列を追加できます。これは、アプリケーション内で何らかの条件に対する応答として特定の列を追加する必要がある場合に役立ちます。
このコード スニペットは Add
メソッドを使用して NumericColumn
を XamDataGrid に追加する方法を示します。 このコードを実行した後に列が既存列 (ある場合) の右側に表示されます。または XamDataGrid の左に最初の列として追加されます。
C# の場合:
NumericColumn numericColumn = new NumericColumn();
numericColumn.PropertyPath = "Sales";
DataGrid.Columns.Add(numericColumn);
XamDataGrid コントロールを使用すると、各 Remove
と RemoveAt
メソッドを使用して、手動で定義した列や、自動で生成された列を削除できます。
このコード スニペットは、RemoveAt
メソッドを使用して XamDataGrid コントロールでインデックス 1 に定義された列を削除する方法を示します。 このコードをを実行した後に列が削除され右に列がある場合左へシフトされます。
C# の場合:
DataGrid.Columns.RemoveAt(1);
XamDataGrid コントロールを使用すると、手動で定義した列を挿入できます。これは、たとえば XamDataGrid コントロール内の特定の位置に列を追加する必要がある場合に役立ちます。
このコード スニペットは、Insert
メソッドを使用して XamDataGrid コントロールでインデックス 0 に定義された新しい列を挿入する方法を示します。このコードを実行した後に列が XamDataGrid コントロール内の最初の列として表示され、既存の列がある場合は右にシフトされます。
C# の場合:
NumericColumn numericColumn = new NumericColumn();
numericColumn.PropertyPath = "Sales";
DataGrid.Columns.Insert(0, numericColumn);
XamDataGrid を使用すると、手動で定義した列を動的に配置できます。この動作は、アプリケーションで何らかの条件を満たした場合に、即座に列を再配置する必要がある場合に役立ちます。
このコード スニペットは MoveColumn
メソッドを使用して XamDataGrid コントロールで既存の 2 列を移動する方法を示します。このコードを実行すると、コレクション内の oldIndex
位置に存在する列オブジェクトのインデックスが newIndex
に設定され、コレクション内で newIndex 以上のインデックスを持つすべての列のインデックス位置が 1 つ増分されます。newIndex 未満のインデックス位置で oldIndex 以上のインデックス位置を持つ列は、インデックス位置が 1 つ減分されます。次の例で、この処理を説明します。
C# の場合:
DataGrid.MoveColumn(2, 1);
XamDataGrid コントロールを使用すると、手動で定義した列のうち、まだ列コレクションに追加されていない列を、配置済みの列と交換できます。この動作はアプリケーションで何らかの条件を満たした場合の応答として、列内に含まれる現在のデータのセットを、現在表示されていない基本データを使用する別のセットに置き換える必要がある場合に役立ちます。
このコード スニペットは、ExchangeColumn
メソッドを使用して XamDataGrid コントロールの既存の列を新しい列で置き換える方法を示します。このコードを実行すると、2 番目のパラメーターとして渡された列オブジェクトが XamDataGrid コントロールから削除され、最初のパラメーターとして渡された列で置き換えられます。
C# の場合:
NumericColumn salesColumn = new NumericColumn();
salesColumn.PropertyPath = "Sales";
DataGrid.Columns.Add(salesColumn);
TextColumn territoryColumn = new TextColumn();
territoryColumn.PropertyPath = "Territory";
...
DataGrid.ExchangeColumn(territoryColumn, salesColumn);
XamDataGrid コントロールを使用すると、ビューから列を非表示にできます。この動作は、すべての Column
オブジェクトから公開される IsHidden
プロパティからアクセスできます。列を非表示にする動作は、アプリケーションの何らかの条件によって、ビュー列から削除する必要があり、実際のグリッドから削除しない場合に役立ちます。非表示になった列は、XamDataGrid コントロールの Columns コレクション内のインデックス位置を維持します。
このコード コードスニペットは、XamDataGrid コントロールで定義済みの列を非表示にする方法を示します。このコードを実行した後、XamDataGrid コントロール内に表示された Sales 列がビューから削除され、Sales 列の次にあった Territory 列が、最初に Sales 列の配置されていた場所にシフトします。
C# の場合:
NumericColumn salesColumn = new NumericColumn();
salesColumn.PropertyPath = "Sales";
DataGrid.Columns.Add(salesColumn);
...
salesColumn.IsHidden = true;