[ハマリ] ComboBoxのDisplayMemberとValueMember

スポンサーリンク

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

コメント

タイトルとURLをコピーしました