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 オブジェクトに変更を加えると、列単位でデータ変換を指定できます。特定の列のデータ変換リストを構築するには、次の手順に従います。
プログラムが実行されると、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 チェックボックスを選択しなくても、エンドユーザーがセルをクリックすると、セルの値が切り替えられます。次の図に、典型的なチェックボックスを示します。
次の図のような値とそれに対応する説明テキストから成るデータを使用するグリッドドロップダウンが必要であるとします。
この場合は、意味があいまいな TypeId を表示するのではなく、理解しやすい TypeDesc をドロップダウンに表示するのが普通です。 ValueTranslate プロパティによって、TypeId 値を TypeDesc の説明に自動的にマップできます。これにより、ユーザーがドロップダウンにアクセスすると、TypeDesc のテキストが表示されます。