4.0J以前のバージョンのコンボコントロールのDescriptionMember・DisplayMember・ValueMemberプロパティを実装する方法

文書番号 : 40940     文書種別 : 使用方法     登録日 : 2017/08/25     最終更新日 : 2017/08/25
文書を印刷する
対象製品
InputMan for Windows Forms 10.0J
詳細
InputMan for .NET 4.0J Windows Forms Ed. 以前のバージョンのマルチカラムの制限をなくし3列以上の表示を可能にしたことで、DescriptionMember、DisplayMember、およびValueMemberプロパティの実装方法が変更されました。同様の動作を実現するためには、下記を参考にしてください。

DescriptionMemberプロパティについて
InputMan for Windows Forms 10.0Jのコンボ・マスクコンボコントロールは、任意の数の列を設定でき、各列がデータソースのどのDataColumnに対応するかは、各列(ListColumnクラス)のDataPropertyNameプロパティで指定することができます。

DisplayMemberプロパティについて
DisplayMemberプロパティと同じ動作をさせるためには、TextSubItemIndexプロパティを利用します。TextSubItemIndexプロパティには、テキストボックス部に表示する項目の列のインデックスを指定します。また、TextSubItemIndexプロパティで指定した列は、SelectedTextプロパティで取得される値となります。

ValueMemberプロパティについて
ValueMemberプロパティと同じ動作は、ValueSubItemIndexプロパティを設定することで実現することが可能です。ValueSubItemIndexプロパティには、値として扱う項目の列のインデックスを指定します。また、ValueSubItemIndexプロパティで指定した列は、SelectedValueプロパティで取得される値となります。

以下はコンボコントロールに上記設定を行うサンプルコードです。
[Visual Basic]
Imports GrapeCity.Win.Editors

' データを作成します。
Dim dt As New DataTable("TEST")
dt.Columns.Add("Name", GetType(String))
dt.Columns.Add("Value", GetType(String))
dt.Columns.Add("Code", GetType(Int32))

dt.Rows.Add("日本", "Japan", 81)
dt.Rows.Add("中国", "China", 86)
dt.Rows.Add("インド", "India", 91)
dt.Rows.Add("ベトナム", "Vietnam", 84)
dt.Rows.Add("アメリカ", "USA", 1)
dt.AcceptChanges()

' コンボコントロールの設定
' DataSourceプロパティが設定されたときにカラムを自動的に生成しないようにします。
GcComboBox1.AutoGenerateColumns = False

' カラムを設定します。
Dim lcName As New ListColumn("Name")
lcName.DataPropertyName = "Name"
lcName.Header.Text = "日本名"
lcName.AutoWidth = True
Dim lcValue As New ListColumn("Value")
lcValue.DataPropertyName = "Value"
lcValue.Header.Text = "English"
lcValue.AutoWidth = True
Dim lcCode As New ListColumn("Code")
lcCode.DataPropertyName = "Code"
lcCode.Header.Text = "国番号"
lcCode.Width = 50
' Codeを1番目、Nameを2番目、Valueを3番目とします
GcComboBox1.ListColumns.AddRange(New ListColumn() {lcCode, lcName, lcValue})

' テキスト部に使用され、SelectedTextプロパティで取得される
' カラムのインデックスを指定します。
GcComboBox1.TextSubItemIndex = 1    '<-- 1=Nameを設定しています。
' SelectedValueプロパティで取得されるカラムのインデックスを指定します。
GcComboBox1.ValueSubItemIndex = 0   '<-- 0=Codeを設定しています。
' データソースを設定します。
GcComboBox1.DataSource = dt

' ドロップダウンの大きさを調整します。
GcComboBox1.DropDown.Size = New Size(lcCode.Width + lcName.Width + lcValue.Width, GcComboBox1.DropDown.Size.Height)

[C#]
using GrapeCity.Win.Editors;

// データを作成します。 
DataTable dt = new DataTable("TEST");
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Value", typeof(string));
dt.Columns.Add("Code", typeof(Int32));

dt.Rows.Add("日本", "Japan", 81);
dt.Rows.Add("中国", "China", 86);
dt.Rows.Add("インド", "India", 91);
dt.Rows.Add("ベトナム", "Vietnam", 84);
dt.Rows.Add("アメリカ", "USA", 1);
dt.AcceptChanges();

// コンボコントロールの設定 
// DataSourceプロパティが設定されたときにカラムを自動的に生成しないようにします。 
gcComboBox1.AutoGenerateColumns = false;

// カラムを設定します。 
ListColumn lcName = new ListColumn("Name");
lcName.DataPropertyName = "Name";
lcName.Header.Text = "日本名";
lcName.AutoWidth = true;
ListColumn lcValue = new ListColumn("Value");
lcValue.DataPropertyName = "Value";
lcValue.Header.Text = "English";
lcValue.AutoWidth = true;
ListColumn lcCode = new ListColumn("Code");
lcCode.DataPropertyName = "Code";
lcCode.Header.Text = "国番号";
lcCode.Width = 50;
// Codeを1番目、Nameを2番目、Valueを3番目とします 
gcComboBox1.ListColumns.AddRange(new ListColumn[] { lcCode, lcName, lcValue });

// テキスト部に使用され、SelectedTextプロパティで取得される 
// カラムのインデックスを指定します。 
gcComboBox1.TextSubItemIndex = 1;   //<-- 1=Nameを設定しています。 
// SelectedValueプロパティで取得されるカラムのインデックスを指定します。 
gcComboBox1.ValueSubItemIndex = 0;  //<-- 0=Codeを設定しています。 
// データソースを設定します。 
gcComboBox1.DataSource = dt;

// ドロップダウンの大きさを調整します。 
gcComboBox1.DropDown.Size = new Size(lcCode.Width + lcName.Width + lcValue.Width, gcComboBox1.DropDown.Size.Height);

関連情報