gpt4 book ai didi

c# - 从数据库中填充组合框

转载 作者:可可西里 更新时间:2023-11-01 08:56:45 24 4
gpt4 key购买 nike

我有一个组合框错误

我的代码:

SqlConnection conn = new SqlConnection();
try
{
conn = new SqlConnection(@"Data Source=SHARKAWY;Initial Catalog=Booking;Persist Security Info=True;User ID=sa;Password=123456");
string query = "select FleetName, FleetID from fleets";
SqlCommand cmd = new SqlCommand(query, conn);
cmd.CommandText = query;
conn.Open();
SqlDataReader drd = cmd.ExecuteReader();
while (drd.Read())
{
cmbTripName.Items.Add(drd["FleetName"].ToString());
cmbTripName.ValueMember = drd["FleetID"].ToString();
cmbTripName.DisplayMember = drd["FleetName"].ToString();
}
}
catch
{
MessageBox.Show("Error ");
}

数据显示在组合框中,但是当您更改选择值成员时,显示成员不会改变。

它现在可以工作了,但是当我点击按钮显示数据时

private void button1_Click(object sender, EventArgs e)
{
label1.Text = cmbTripName.DisplayMember;
label2.Text = cmbTripName.ValueMember;
}

这是显示的:

舰队名称
舰队编号

它不显示值

最佳答案

您将不得不完全重写您的代码。 DisplayMember ValueMember 指向columnNames!此外,您应该真正使用 using block - 因此连接在查询执行后得到disposed(和closed)。

我没有使用 dataReader 来访问值,而是选择了 dataTable 并将其作为数据源绑定(bind)到组合框上。

using (SqlConnection conn = new SqlConnection(@"Data Source=SHARKAWY;Initial Catalog=Booking;Persist Security Info=True;User ID=sa;Password=123456"))
{
try
{
string query = "select FleetName, FleetID from fleets";
SqlDataAdapter da = new SqlDataAdapter(query, conn);
conn.Open();
DataSet ds = new DataSet();
da.Fill(ds, "Fleet");
cmbTripName.DisplayMember = "FleetName";
cmbTripName.ValueMember = "FleetID";
cmbTripName.DataSource = ds.Tables["Fleet"];
}
catch (Exception ex)
{
// write exception info to log or anything else
MessageBox.Show("Error occured!");
}
}

使用 dataTable 可能比 dataReader 稍微慢一些,但我不必创建自己的类。如果您确实必须/想要使用DataReader,您可以选择@Nattrass 方法。无论如何你应该写一个 using block !

编辑

如果你想获得组合框的当前值试试这个

private void cmbTripName_SelectedIndexChanged(object sender, EventArgs e)
{
if (cmbTripName.SelectedItem != null)
{
DataRowView drv = cmbTripName.SelectedItem as DataRowView;

Debug.WriteLine("Item: " + drv.Row["FleetName"].ToString());
Debug.WriteLine("Value: " + drv.Row["FleetID"].ToString());
Debug.WriteLine("Value: " + cmbTripName.SelectedValue.ToString());
}
}

关于c# - 从数据库中填充组合框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12494634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com