True DBGrid for WinForms
変換

FormatTextイベントを使用すると、データの値をより説明的な表現の値にマップできますが、True DBGrid for WinForms にも、コードを記述しないで、このように自動的にデータを変換するメカニズムがあります。ValueItemコレクションオブジェクトを使用すると、テキストまたは画像のいずれかを指定して、それらを基礎データ値の代わりに表示できます。

この機能は、数字コードまたは短く省略された値をエンドユーザーが理解しやすい形式で表示するために適しています。たとえば、国コードを正式な国名または各国の国旗の画像としてレンダリングできます。また、0、1、2の各数字を Yes、No、Maybe と表示できます。実行値(0、1、2)または変換された値(Yes、No、Maybe)のいずれかをセルやドロップダウンコンボボックスにラジオボタンとして表示できます。

ValueItemsオブジェクトには、基礎データ値とグリッド内でのそのビジュアルな表現の関連付けを定義するためのコレクションとプロパティが含まれます。ValueItemCollection は、0個以上の ValueItem  オブジェクトから成るコレクションを含み、各 ValueItem は、2つの主要なプロパティをサポートしています。Valueは基礎データ値で、DisplayValue,はそのビジュアルな表現です。どちらのプロパティも Object 型です。各  C1DataColumn オブジェクトは1つの ValueItems オブジェクトを所有します。最初、このコレクションは空です。

実行時には、他の C1TrueDBGrid または Visual Studio のコレクションと同様に、ValueItem のコレクションを操作できます。ValueItems は、ValueItemCollection オブジェクトを介して追加、削除、または操作できます。

設計時には、.NET の C1TrueDBGrid デザイナを使用するから ValueItemCollection エディタを使用するを使用できます。詳細については、 Using the ValueItemCollection Editorを参照してください。

テキストからテキストへの変換を指定する

Country フィールドが簡単な符号で表されている次のグリッドを例にします。

この符号を正しい名前として表示するには、列のValueItemCollectionオブジェクトを使用して、自動データ変換を指定します。それには、設計時に、.NET のValueItemCollection エディタを使用するを使用します。

このエディタを使って ValueItemCollection オブジェクトに変更を加えると、列単位でデータ変換を指定できます。特定の列のデータ変換リストを構築するには、次の手順に従います。

  1. Visual Studio のプロパティウィンドウで、Columns コレクションの横にある省略符ボタンをクリックして、C1TrueDBGrid デザイナを使用するを開きます。
  2. 左ペインで、内容を変換する列を選択します。右ペインで、 ValueItems ノードを展開します。Values ノードの横の省略符ボタンをクリックすると、ValueItemCollection エディタを使用するが起動します。
  3. 右ペインで、 ValueItems ノードの下の Translate プロパティを True に設定します。
  4. 左ペインで〈...〉ボタンをクリックすると、ValueItem オブジェクトが追加されます。右ペインで、各 ValueItemValue および DisplayValue を指定します。ValueItem のテキストを入力する場合は、省略符ボタンを使用しません。このボタンは、DisplayValue にビットマップを入力するために使用します。
  5. OK〉 または 〈Apply〉 を選択して変更をコミットします。

プログラムが実行されると、Value 列のアイテムと一致する Country フィールドの値が、対応する DisplayValue エントリとして表示されます。たとえば、CAN はカナダになり、UK はイギリス になります。

基礎データベースには影響がないことに注意してください。データ値の表現だけが異なります。コードで同様の結果を得るには、次のようにします。

C#
コードのコピー
ValueItemCollection v = this.c1TrueDBGrid1.Columns["Country"].ValueItems.Values;
v.Add(new ValueItem("Spain", "ESP"));
v.Add(new ValueItem("Germany", "DEU"));
v.Add(new ValueItem("United States", "USA"));
v.Add(new ValueItem("Hungary", "HUN"));
v.Add(new ValueItem("Austria", "AUT"));
v.Add(new ValueItem("Italy", "ITA"));
v.Add(new ValueItem("France", "FRA"));
this.c1TrueDBGrid1.Columns["Country"].ValueItems.Translate = true;

テキストから画像への変換を指定する

テキストからテキストへの変換の指定と同じ方法で、テキストから画像への変換を行うことができます。ValueItems エディタ内で、DisplayValue 列に文字列を入力する代わりに、省略符ボタンを使用して、データ変換に使用されるビットマップを選択できます。ビットマップの選択を取り消すには、DisplayValueプロパティボックス内のテキストを削除し、別のビットマップを選択するか、テキストを入力します。

ValueItems オブジェクトのTranslateプロパティを True に設定する必要があることに注意してください。ビットマップの高さによっては、Visual Studio のプロパティウィンドウでRowHeight プロパティの値を増やす必要があります。その場合は、グリッドのStyle プロパティの VerticalAlignmentメンバも Center に変更する必要があります。これにより、ビットマップ(および他の列のテキストデータ)は、グリッドセルの上部ではなく、上下の中央に置かれます。

プログラムが実行されると、Value 列のアイテムと一致する Country フィールドの値は、対応する DisplayValue の画像として表示されます。

テキスト間の変換と同様に、基礎データベースには影響がありません。データ値の表現だけが異なります。コードで同様の結果を得るには、次のようにします。

C#
コードのコピー
ValueItemCollection v = this.c1TrueDBGrid1.Columns["Country"].ValueItems.Values;
ValueItem Item = new ValueItem();
Item.Value = "Germany";
Item.DisplayValue = Image.FromFile("german-flag.jpg");
v.Add(Item);
Item = new ValueItem();
Item.Value = "USA";
Item.DisplayValue = Image.FromFile("american-flag.jpg");
v.Add(Item);
Item = new ValueItem();
Item.Value = "France";
Item.DisplayValue = Image.FromFile("france-flag.jpg");
v.Add(Item);
Item = new ValueItem();
Item.Value = "Austria";
Item.DisplayValue = Image.FromFile("austria-flag.jpg");
v.Add(Item);
this.c1TrueDBGrid1.Columns["Country"].ValueItems.Translate = true;

ブール値をチェックボックスとして表示する

ValueItems オブジェクトを使用して、ブール値をセル内にチェックボックスとして表示することもできます。ブール値のチェックボックスを表示するために、ValueItems オブジェクトを定義する必要はありません。Presentation プロパティをPresentationEnum.CheckBoxに設定するだけで済みます。

Translate チェックボックスを選択しなくても、自動データ変換が有効になります。また、CycleOnClick チェックボックスを選択しなくても、エンドユーザーがセルをクリックすると、セルの値が切り替えられます。次の図に、典型的なチェックボックスを示します。

メモ:チェックボックスに別のビットマップを使用する場合は、C1DataColumnValues プロパティを使用して、2つの状態を表す ValueItem オブジェクトをそれぞれ定義します。PresentationプロパティをPresentationEnum.Normalに設定し、Translateプロパティと CycleOnClickプロパティを True に設定します。

True DBDropDown を使ってデータを自動的に変換する

次の図のような値とそれに対応する説明テキストから成るデータを使用するグリッドドロップダウンが必要であるとします。

この場合は、意味があいまいな TypeId を表示するのではなく、理解しやすい TypeDesc をドロップダウンに表示するのが普通です。 ValueTranslate プロパティによって、TypeId 値を TypeDesc の説明に自動的にマップできます。これにより、ユーザーがドロップダウンにアクセスすると、TypeDesc のテキストが表示されます。