我正在创建一个从数据库中提取数据的表单,并提供两个组合框。 ComboBox1以“名字姓氏”格式显示员工姓名。 ComboBox2以“Last,First”格式显示Employee名称。这些名字毫不费力地进入组合框。
我试图找出的方法是,一旦用户从任一下拉框中选择一个名称,它将根据查询中的其他信息填充某些文本框,例如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();
}
}
答案 0 :(得分:5)
如果你需要的只是文字,你可以简单地使用:
textBox1.Text = comboBox1.Text;
答案 1 :(得分:5)
在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;
}
答案 2 :(得分:3)
您需要的是使用TEXT值而不是textBox1.Text = comboBox1.SelectedItem;
它应该是textBox1.Text = comboBox1.SelectedItem.ToString();
或只是textBox1.Text = comboBox1.Text
答案 3 :(得分:2)
由于您可以使用任何类型的项目(不仅仅是ComboBox
)填充string
,因此SelectedItem
属性的类型为object
。如果您插入了strings
,则可以通过投射
string s = (string)myComboBox.SelectedItem;
如果您添加了类Person
等其他类型的项目,您可以检索此对象或使用
Person p = (Person)myComboBox.SelectedItem;
string s = myComboBox.SelectedItem.ToString();
string lastName = ((Person)myComboBox.SelectedItem).LastName;
答案 4 :(得分:2)
不幸的是,你不能这样做:
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);
答案 5 :(得分:-2)
您需要使用:
textBox1.Text = comboBox1.SelectedItem.Text
获取项目的文本部分。
SelectedItem
是一个对象,您正在尝试将其分配给文本框的Text
属性。