最近在做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
/// </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;
}
/// 加载用户列表到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;
}