c# - 在 C# 中使用带有数据库的组合框选择索引值
问题描述
我是 C# 新手,我有一个问题。我想从组合框中选择一个值,它应该在标签中显示它的年龄。
我要做的是:
public void FillCombo()
{
SqlDataAdapter adap = new SqlDataAdapter("Select * from customers",con);
DataTable dt = new DataTable();
adap.Fill(dt);
comboBox1.DataSource = dt;
comboBox1.DisplayMember = "name";
comboBox1.ValueMember = "id";
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
con.Open();
SqlCommand cmd1 = new SqlCommand("Select * from customers where name=@name ", con);
cmd1.Parameters.AddWithValue("@name",comboBox1.SelectedItem));
int i= cmd1.ExecuteNonQuery();
if (i > 0)
{
SqlDataReader sqlrdr = cmd1.ExecuteReader();
while (sqlrdr.Read())
{
String age= sqlrdr["age"].ToString();
label1.Text = age;
}
}
else{
MessageBox.Show("no value");
}
con.Close();
}
即使我在数据库中有值,它也没有显示任何值消息。我能做些什么?
解决方案
当您将 DataSource 设置为 DataTable 时,组合框中的每个项目都是DataRowView。因此,您已经在组合框中获得了有关当前客户年龄的信息。无需再次调用数据库。
您只需要使用 SelectedItem 属性来检索有关年龄字段或数据源中存在的任何其他字段的信息
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
DataRowView rv = l.SelectedItem as DataRowView;
// For safety, always check for null.
// It is possible that SelectedIndexChanged
// will be called even when there is no selection in the combobox
if(rv != null)
{
label1.Text = rv["age"].ToString();
....
}
}
推荐阅读
- android - 不接收 FCM 通知
- core-data - SwiftUI:分层,可选列表
- typescript - 如何在树结构上列出 MongoDB 中的所有项目?
- typescript - 如何将参数添加到类的方法?
- python-3.x - 如何在python中输入由换行符分隔的整数列表
- javascript - ReactToPrint 忽略颜色变化,而是打印原始颜色
- typescript - 如何在 TypeScript 中使用 react-use-gesture 和 useSpring?
- embedded - stm32F1 DMA 在使用 2 个 UART 时冻结而没有任何错误
- laravel - 在 Laravel 中创建一个 cURL 请求类
- intel-fpga - Intel Cyclone LP 上的 CSI-2 接收器