使用DataReader时,ComboBox数据绑定不能工作

本文关键字:数据绑定 不能 工作 ComboBox DataReader 使用 | 更新日期: 2023-09-27 18:13:02

你们中的一些人可能认为这个问题已经在这个社区的其他地方解决了,但是我真的无法绕过它。我有一个组合框,我喜欢用DataReader填充它。像往常一样,我创建了一个类来设置value memberdisplay member。我的代码如下:

using (MySqlCommand cmd = new MySqlCommand("SELECT item_id, item_name FROM items WHERE status='active'", Class_Connection.conn))
        {
            MySqlDataReader rdr = cmd.ExecuteReader();
            ArrayList temptbl = new ArrayList();
            while (rdr.Read())
            {
                //MessageBox.Show(rdr.GetString(1).ToString() + "::" + rdr.GetString(0).ToString());
                temptbl.Add(new Class_NameValue(rdr.GetString(1), rdr.GetString(0)));
            }
            rdr.Close();
            // define Display and Value members
            cmb_items.DisplayMember = "NameMember";
            cmb_items.ValueMember = "IdMember";
            // set the DataSource to the DataTable 
            cmb_items.DataSource = new BindingSource(temptbl, null); 
        }

Get-Set类如下:

class Class_NameValue
{
    private string myNameMember;
    private string myValueMember;
    public Class_NameValue(string strNameMember,string stringValueMember)
    {
        this.myNameMember = strNameMember;
        this.myValueMember = stringValueMember;

    }
    public string NameMember
    {
        get
        {
            return myNameMember;
        }
    }
    public string IdMember
    {
        get
        {
            return myValueMember;
        }
    }
}

代码可以正常编译。但是当应用程序运行时,它会给出一个错误" Cannot bind to the new display member.Parameter name: newDisplayMember "

我的代码有什么问题?有人能帮忙吗?

使用DataReader时,ComboBox数据绑定不能工作

你需要设置

在数据源之前的DisplayMember和ValueMember属性。

MySqlDataReader rdr = cmd.ExecuteReader();
ArrayList temptbl = new ArrayList();
while (rdr.Read()){
    temptbl.Add(new Class_NameValue(rdr.GetString(1), rdr.GetString(0)));
}
rdr.Close();
cmb_items.DisplayMember = "NameMember";
cmb_items.ValueMember = "IdMember";
cmb_items.DataSource = new BindingSource(temptbl, null);

还有一个技巧通过

中的NameMemberIdMember

temptbl。Add(new Class_NameValue(rdr.GetString(1), rdr.GetInt32(0)));

temptbl。添加新的Class_NameValue(NameMember =rdr.GetString (1) .ToString (), IdMember = rdr.GetString (0) .ToString ()));

表示从这里而不是在类本身中设置属性value。请尝试. .

试着这样做:

var bs = new BindingSource(temptbl, null);
cmb_items.DataSource = bs;
cmb_items.DisplayMember = "yourDisplayMember";
cmb_items.ValueMember = "yourValueMember";