winform下comboBox控件绑定数据并设置其value【整理】

最近在做comboBox绑定数据库数据时遇到一个问题,就是绑定之后怎样获取其value

开始是这样做的:

/// <summary>
/// 加载用户列表到comboBox
/// </summary>
private void GetUserList()
{
    
//调用连接数据库函数
    OpenConn();
    SqlCommand cmd 
= conn.CreateCommand();
    cmd.CommandText 
= "select * from Users";
    SqlDataReader sdr 
= cmd.ExecuteReader();
    
    
while(sdr.Read())
    {
        
//索引1是用户名
        comboBox1.Items.Add(sdr.GetValue(1));
    }
    sdr.Close();
}


这样可以得到用户列表,但是comboBox的SelectValue却都是null,所以如果不能进行SelectedIndexChanged事件的操作(虽然可以用comboBox的SelectIndex等其他属性,但是还是没有SelectValue方便)。
后来在网上找到一种方法,利用ArrayList存放数据库的数据并将ArrayList作为数据源绑定到comboBox,如下:

/// <summary>
/// 加载用户列表到comboBox
/// </summary>
private void GetUserList()
{
    
//调用连接数据库函数
    OpenConn();
    SqlCommand cmd 
= conn.CreateCommand();
    cmd.CommandText 
= "select * from Users";
    SqlDataReader sdr 
= cmd.ExecuteReader();

    ArrayList al 
= new ArrayList();
    
    
while (sdr.Read())
    {
        //索引0为用户在数据库中的ID,该值到时作为comboBox的value,这样就可以使用comboBox的SelectValue了         al.Add(
new DictionaryEntry(sdr.GetValue(0), sdr.GetValue(1)));
    }
    sdr.Close();

    
this.comboBox1.DisplayMember = "Value";
    
this.comboBox1.ValueMember = "Key";
    
//注意:下面这句要放到最后面
    
//因为执行到下面这句后会调用SelectedIndexChanged事件(不知道为什么,谁能解释一下吗?)
    
//这时如果没有判断SelectVlaue是否为空可能会出错
    this.comboBox1.DataSource = al;
}

 

posted @ 2009-06-18 14:51  与卡  阅读(2931)  评论(2编辑  收藏  举报