C# 所选组合框到文本框

C# 所选组合框到文本框,c#,winforms,visual-studio-2010,combobox,C#,Winforms,Visual Studio 2010,Combobox,我正在创建一个表单,它从数据库中提取数据,并提供两个组合框。ComboBox1以“名字-姓氏”格式显示员工姓名。ComboBox2以“Last,First”格式显示员工姓名。这些名字毫无困难地进入组合框 我试图弄清楚的是,一旦用户从下拉框中选择一个名称,它将根据查询中的其他信息填充某些文本框,如textBox1、textBox2 我试图使用 textBox1.Text = comboBox1.SelectedItem; 但是,我得到一个错误声明:无法隐式地将类型“object”转换为“stri

我正在创建一个表单,它从数据库中提取数据,并提供两个组合框。ComboBox1以“名字-姓氏”格式显示员工姓名。ComboBox2以“Last,First”格式显示员工姓名。这些名字毫无困难地进入组合框

我试图弄清楚的是,一旦用户从下拉框中选择一个名称,它将根据查询中的其他信息填充某些文本框,如textBox1、textBox2

我试图使用

textBox1.Text = comboBox1.SelectedItem;
但是,我得到一个错误声明:无法隐式地将类型“object”转换为“string”。存在显式转换(是否缺少强制转换?)

这是我目前的代码。我故意省略了对数据库的连接查询等

public partial class Employees : Form
{
    public Employees()
    {
        InitializeComponent();

        //Connect to database for Employees Table Headers
        SqlConnection myConnection = new SqlConnection(@"Server=Server...");

        try {
            myConnection.Open();
            string SqlDataPull = String.Format("SELECT * FROM Employees WHERE Lname IS NOT NULL {0} ORDER By Lname", (checkBox1.Checked ? "AND Active='Y'" : ""));
            SqlCommand cmd = new SqlCommand(SqlDataPull, myConnection);
            cmd.CommandType = CommandType.Text;
            SqlDataReader dr = cmd.ExecuteReader();

            while (dr.Read()) {
                string strEmployee = String.Format("{0}  {1}", dr["Fname"], dr["Lname"]);
                comboBox1.Items.Add(strEmployee);
                textBox1.Text = comboBox1.SelectedItem;
                string strEmployee2 = String.Format("{0}, {1}", dr["Lname"], dr["Fname"]);
                comboBox2.Items.Add(strEmployee2);
            }
        } catch (Exception e) {
            MessageBox.Show(e.ToString());
        } finally {
            if (myConnection != null) {
                myConnection.Dispose();
            }
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Main myNewForm = new Main();
        myNewForm.Show();
        this.Close();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        Reports myNewForm = new Reports();
        myNewForm.Show();
        this.Close();
    }
}

您需要的是使用文本值,而不是
textBox1.TEXT=comboBox1.SelectedItem
应该是
textBox1.Text=comboBox1.SelectedItem.ToString()
或干脆
textBox1.Text=comboBox1.Text

如果您只需要文本,您可以简单地使用:

textBox1.Text = comboBox1.Text;
您需要使用:

textBox1.Text=comboBox1。选择editem.Text
获取项目的文本部分


SelectedItem
是一个对象,您试图将其分配给文本框的
Text
属性。

在SelectedIndexChanged事件中,添加代码:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
  if (comboBox1.SelectedIndex == -1) {
    textBox1.Text = string.Empty;
  } else {
    textBox1.Text = comboBox1.SelectedItem.ToString();
  }
}  
您可能应该从while循环中删除此语句:

// textBox1.Text = comboBox1.SelectedItem;
因为您刚刚将该项添加到ComboBox项集合中,但实际上并不知道它已被选中

此外,请确保将事件连接起来:

public Employees()
{
  InitializeComponent();

  // yada-yada-yada

  comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged;
}

由于可以用任何类型的项(不仅仅是
字符串
)填充
组合框
),因此
SelectedItem
属性的类型为
对象
。如果插入了
字符串
,则可以通过强制转换来检索它们

string s = (string)myComboBox.SelectedItem;
如果添加了其他类型的项,如class
Person
,则可以检索此对象或使用获取其字符串或某些属性

Person p = (Person)myComboBox.SelectedItem;
string s = myComboBox.SelectedItem.ToString();
string lastName = ((Person)myComboBox.SelectedItem).LastName;

不幸的是,你不能这样做:

textBox1.Text = comboBox1.SelectedItem.ToString();
因为结果也是路径:

System.Windows.Controls.ComboBoxItem: Citroen
您只需要值,例如雪铁龙

所以问题可以通过搜索如下字符串来解决:

      string auto = comboBox1.SelectedItem.ToString();
      int index = auto.IndexOf(" ");
      carModel.Text = auto.Substring(index+1);

我很想知道否决票的来源和原因,因为这是100%正确的。@john请解释你自己。Text返回组合框中当前的文本,可以是所选项目的文本表示形式,也可以是用户输入的任意内容的自由类型。如有必要,可以将DropDownStyle设置为DropDownList,也可以在此声明之前进行验证。谢谢。我是学C#的新手;如何定义组合框中的信息是文本?我按照你的建议编辑了这一行;但是,现在我发现了错误:错误1“object”不包含“Text”的定义,并且找不到接受“object”类型的第一个参数的扩展方法“Text”(是否缺少using指令或程序集引用?)SelectedItem的类型为“object”,并且没有名为“Text”的属性您可能应该在当前实现中使用@LarsTech的代码。@john我相信您考虑的是ASP.NET
DropDownList
,它使用具有
Text
属性的
ListItem
对象。这将适用于他当前的实现,但如果组合框是数据绑定的,“ToString”绑定对象的文本不是组合框中的文本,这可能会产生意外的结果。LarsTech,感谢您提供的信息。我已经添加了abobe中列出的代码,但是调试表单时什么也没有发生。未向textBox1添加任何内容。它仍然是空白的。这可能是因为组合框是从SQL查询填充的吗?@ChrisTurner然后事件没有连接。我更新了示例。您也可以从设计器中选择ComboBox控件,按Properties窗口中的lightning bolt图标,然后在
SelectedIndexChanged
事件上双击,以实现此目的。@JTorres确实如此。我在asp.net的世界里呆得太久了。还有,我把你从反对票中选了出来,我也一样。我不得不拿出一个表单的项目来测试它,因为它看起来是对的,但感觉是错的。