我无法从组合框中获取值。我的目标是当我在组合框中选择一个项目时,它会在txtadres
文本框中显示客户的地址。
当我测试代码时,它会给出一个空引用异常。
我也试过了comboBox1.SelectedItem.ToString();
,但这也不起作用。我不能使用comboBox1.Text
,因为显示成员与值成员不同。显示成员是客户名称,值成员是客户代码。
private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
{
string cs = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Application.StartupPath + "\\Database1.accdb";
string cc = comboBox1.SelectedValue.ToString();
string sql = "SELECT * FROM Customers WHERE customercode = '" + cc + "'";
using (OleDbConnection con = new OleDbConnection(cs))
{
if (cc == "")
{
txtadres.Text = "No address found!";
}
else
{
OleDbCommand com = new OleDbCommand(sql, con);
con.Open();
OleDbDataReader DB = com.ExecuteReader();
if (!DB.Read())
return;
txtadres.Text = DB["Adress"].ToString();
con.Close();
}
}
}
更新我找到了溶剂,这对我有用:string cc = Convert.ToString(comboBox1.SelectedValue);
答案 0 :(得分:1)
组合框中的SelectedItem
为ListBoxItem
,并在this MSDN page上进行了描述。
This MSDN page提供了有关ListBoxItem的方法和属性的更多信息。
简而言之,要访问SelectedItem的文本,您将使用如下代码:
string itemText = (comboBox1.SelectedItem.Content).ToString();
如果您的ComboBox项不仅仅是文本,这将返回所选对象(无论它是什么类)。如果它只是一个字符串,这将获得该字符串。
但请记住,SelectedItem
可以为null,因此在使用之前应对其进行空检查。
答案 1 :(得分:0)
我不知道从哪个问题开始说实话,但这里的第一个主要问题是你在每次索引更改时建立了与数据库的连接,这是一个基本的不行。
您需要查看使用数据适配器将数据库查询的内容填充到DataTable对象中。然后,您可以将组合框的数据源设置为DataTable。
从这里开始,您可以分配显示屏和显示屏。组合框的值成员并捕获索引上的选定值,而不调用数据库。
这真的是需要重新思考你的解决方案。
答案 2 :(得分:0)
我对组合框一直有类似的挫败感。这可能不是最好的,但这就是我所做的:
((ComboBoxItem)ComboBox.SelectedItem).CustomerCode;
将ComboBoxItem替换为您填充组合框的任何对象。 当然,这只有在您使用您尝试访问的项目填充组合框时才有效。