バージョン

列の作業

このトピックでは、XamDataGrid コントロールの作業で使用できる、サポートされている列タイプと一般的な列の操作を分かりやすく説明し、理解を深めることができるようにします。

前提条件

本トピックの理解を深めるために、以下のトピックを参照することをお勧めします。

トピック 目的

このトピックでは、XamDataGrid コントロールをビューに追加してサンプルデータを生成するための基本的な手順を紹介します。

このリソース トピックは、 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 つ作成し、各プロパティの名前をそれに関連付られた列の名前として使用します。

プロパティ名 プロパティ タイプ 列タイプ

FirstName

String

LastName

String

Territory

String

Sales

Int

結果の XamDataGrid は、次のスクリーンショットのようになります。

Working with Columns 1.png

手動による列の定義

XamDataGrid コントロールを使用すると、手動で列を定義できます。これにより、列の表示方法を完全に制御できます。

この動作が使用されるシナリオは 2 つあります。

  • XamDataGrid コントロールが特定のタイプのデータの列のみを作成するようにする場合。

  • XamDataGrid コントロールが自動的に作成する列の選択に、特定の列タイプのみが使用されるようにする場合。

デフォルトでは、XamDataGrid コントロールはデータに基づき、すべての列を自動的に作成します。ただし、使用する列のタイプを明示的に選択するオプションも用意されています。

手動による列の定義の例

以下のコード例は、XamDataGrid コントロールの TextColumn および NumericColumn を手動で定義する方法を示します。ただし、任意のサポートされる列タイプに同じロジックを使用できます。

この例は、SampleSalesPerson クラスを 4 パブリック プロパティ (FirstName、LastName、Sales、Territory) を持つデータ項目の実装に使用しています。ただし、基になるデータ項目の 4 つのプロパティすべての列を自動生成するデフォルトの動作とは対照的に手動で 3 つのプロパティ (FirstName、LastName、Sales) のみの列を定義します。

  1. XamDataGrid コントロールの AutoGenerateColumns プロパティを使用して列の自動生成を無効にします。

XAML の場合:

<ig:XamDataGrid x:Name="DataGrid" AutoGenerateColumns="False" />

C# の場合:

DataGrid.AutoGenerateColumns = false;
  1. 文字列プロパティのための 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);
  1. アプリケーションを実行します。XamDataGrid コントロールは 2 つの TextColumn タイプと 1 つの NumericColumn タイプを表示します。

Working with Columns 2.png

自動生成列の列タイプをオーバーライド

1 つまたは複数の列に使用された特定の列タイプのみを制御し、残りの列は XamDataGrid コントロールで自動的に作成する場合があります。次の手順では、使用する列タイプのみ明示的な制御が必要な場合に、手動でそれらの列を定義する方法を順を追って説明します。

これらの手順では、Sales データに使用される数値の TextColumn を追加します。この場合、これらの値は文字列データ型に変換され、TextColumn 内でレンダリングされます。

Note
注:

この列を手動で定義しない、または列が定義済みの場合、PropertyPath がデータ プロパティの名前と一致しないと、XamDataGrid コントロールは自動的にこのデータ型の NumericColumn を作成し、Int 型を維持します。

  1. XamDataGrid コントロール オブジェクトがインスタンス化された場所の後に、自動的に列を作成するために次のコードを追加します。

XAML の場合:

<ig:XamDataGrid x:Name="DataGrid" AutoGenerateColumns="True" />

C# の場合:

DataGrid.AutoGenerateColumns = true;
  1. 数値 "Sales" プロパティにマップして TextColumn のインスタンスを作成し、デフォルトの NumericColumnTextColumn タイプでオーバーライドします。

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);
  1. アプリケーションを実行します。XamDataGrid コントロールは、数値プロパティ Sales も含め 4 つの TextColumn オブジェクトを表示します。

表示された Sales 列は、前述の手順で作成した TextColumn を使用し、XamDataGrid コントロールのデフォルトの動作を上書きします。デフォルトでは、このデータ型に NumericColumn が作成されますが、このコンテキストでは、2 つの列タイプは表示上の区別ができません。

FirstName 列、LastName 列、と Territory 列は、 AutoGenerateColumns プロパティを使用して、基本データの残りのプロパティに基づいて XamDataGrid コントロールが自動的に作成します。

Working with Columns 3.png

列の操作

いくつかの共通の列操作を簡素化するメソッドが XamDataGrid コントロールから公開されています。このようなメソッドには、列の追加、削除、挿入、交換、および非表示があります。このセクションでは、例を示してこれらのメソッドの使用方法を詳しく説明します。

次の例では、列の論理インデックスと表示上のインデックスが同じであるため、XamDataGrid コントロールの Column コレクション内で基本の列に変更を加えると、その変更が XamDataGrid コントロールの UI にすぐに反映されます。

列の操作 API の概要 説明

DataGrid.Columns.Add(Column column)

XamDataGrid の右側にある最後の列の後に新しい列を加えて XamDataGrid の列コレクションに追加します。

インデックスまたは参照オブジェクトによって XamDataGrid の列コレクションの既存列を削除します。

DataGrid.Columns.Insert(int index, Column column)

XamDataGrid の指定した列コレクションのインデックスに新しい列を挿入します。

DataGrid.MoveColumn(int oldIndex, int newIndex)

既存の項目を列コレクションの古いインデックスから新しいインデックスへ移動します。

DataGrid.ExchangeColumn(Column newColumn, Column existingColumn)

XamDataGrid の列コレクションの既存列と新しい列を交換します。

Column.IsHidden = true

XamDataGrid の列コレクションの既存列を非表示にします。

列の追加

XamDataGrid コントロールを使用すると、手動で定義した列に動的に列を追加できます。これは、アプリケーション内で何らかの条件に対する応答として特定の列を追加する必要がある場合に役立ちます。

このコード スニペットは Add メソッドを使用して NumericColumn を XamDataGrid に追加する方法を示します。 このコードを実行した後に列が既存列 (ある場合) の右側に表示されます。または XamDataGrid の左に最初の列として追加されます。

C# の場合:

NumericColumn numericColumn = new NumericColumn();
numericColumn.PropertyPath = "Sales";
DataGrid.Columns.Add(numericColumn);

列の削除

XamDataGrid コントロールを使用すると、各 RemoveRemoveAt メソッドを使用して、手動で定義した列や、自動で生成された列を削除できます。

このコード スニペットは、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 コントロールから削除され、最初のパラメーターとして渡された列で置き換えられます。

Note

注: 交換する列は、両方とも手動で定義されている必要があります。

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;