1

我无法从组合框中获取值。我的目标是,当我在组合框中选择一个项目时,它会在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);

4

3 回答 3

1

SelectedItem组合框中的,ListBoxItem并在此 MSDN 页面上进行了描述。

此 MSDN 页面包含有关 ListBoxItem 的方法和属性的更多信息。

不过,简而言之,要访问 SelectedItem 的文本,您将使用如下代码:

string itemText = (comboBox1.SelectedItem.Content).ToString();

如果您的 ComboBox 项目不只是文本,这将返回所选对象(无论它是什么类)。如果它只是一个字符串,这将为您提供该字符串。

但是请记住,它SelectedItem可以为 null,因此您应该在使用之前对其进行 null 检查。

于 2013-04-03T15:39:14.513 回答
0

老实说,我不知道从哪里开始解决这个问题,但这里的第一个主要问题是您在每次索引更改时都与数据库建立连接,这是一个基本的不。

您需要查看使用数据适配器将数据库查询的内容填充到 DataTable 对象中。然后,您可以将组合框的数据源设置为 DataTable。

从这里,您可以为组合框分配显示和值成员,并在更改的索引上捕获选定的值,而无需对数据库进行任何调用。

这实际上是重新考虑您的解决方案的问题。

于 2013-04-03T15:39:38.160 回答
0

我对组合框也有类似的挫败感。这可能不是最好的,但这就是我所做的:

((ComboBoxItem)ComboBox.SelectedItem).CustomerCode;

将 ComboBoxItem 转换为您填充组合框的任何对象。当然,这仅在您使用您尝试访问的项目填充组合框时才有效。

于 2013-04-03T15:40:49.407 回答