うちの新人が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:


コメント