うちの新人がComboBoxのDataSourceプロパティでハマったので、そのときのメモです(自分もハマった経験があります…)。
ComboBoxは、表示する値と内部的な値を持たせることが可能です。
このときに使用するのが、DataSourceプロパティとDisplayMamberプロパティとValueMemberプロパティです。
DataSourceプロパティにはComboBoxに表示するデータソースを指定します。
DisplayMemberには実際に表示する値の項目名称を、ValueMemberには選択されたときの値の項目名称をセットします。
で、今回ハマったときのコードは下記の通りです。
public class Employee { public int Empno; public string Name; public Employee(int empno, string name) { this.Empno = empno; this.Name = name; } } private void Form1_Load(object sender, EventArgs e) { List<Employee> emp = new List<Employee>(); emp.Add(new Employee(1,"ビル・ゲイツ")); emp.Add(new Employee(2,"スティーブ・バルマー")); comboBox1.DataSource = emp; comboBox1.ValueMember = "Empno"; comboBox1.DisplayMember = "Name"; }
上記を実行した結果は下図の通りです。ごらんのとおり、データが表示されない….. なぜ?となったわけです。
ここで問題となっていたのは、Classのメンバ変数です。
メンバ変数をpublicにして使用していますが、ComboBoxのDisplayMemberとValueMemberには、プロパティの名称を設定する必要があります。
よって、最初に示したコードのクラスは、以下のようにする必要があります(public フィールドからプロパティに変更しました)。
public class Employee { public int Empno { get; set; } public string Name { get; set; } public Employee(int empno, string name) { this.Empno = empno; this.Name = name; } }
で、実行結果は以下の通りです。正常に表示され、問題解決です(^-^)
Please follow and like us:
コメント