C# 如何使comboBox SelectedValue与SQL表ID相等

C# 如何使comboBox SelectedValue与SQL表ID相等,c#,winforms,C#,Winforms,我想控制SQL端的makeEmployeeId等于combobox值,这样当我插入updatedelete时,我就可以通过它们的值直接控制项。然而,当我进入这一行时,我得到了错误。有人知道为什么会这样吗 注意:肯尼兹找到了解决方案。谢谢你的帮助,肯尼兹。 void comboboxrefresh() { cnn.Open(); SqlCommand cmd = new SqlCommand("SELECT EmployeeID,EmployeeFi

我想控制SQL端的makeEmployeeId等于combobox值,这样当我插入updatedelete时,我就可以通过它们的值直接控制项。然而,当我进入这一行时,我得到了错误。有人知道为什么会这样吗

注意:肯尼兹找到了解决方案。谢谢你的帮助,肯尼兹。

    void comboboxrefresh()
    {
        cnn.Open();
        SqlCommand cmd = new SqlCommand("SELECT EmployeeID,EmployeeFirstName,EmployeeLastName FROM Employees", cnn);
        SqlDataReader dr = cmd.ExecuteReader();
        if (dr.HasRows)
        {
            while (dr.Read())
            {
                comboBox1.Items.Insert(dr.GetString(1) + dr.GetString(2), dr.GetInt32(0));
            }
        }

        cnn.Close();
    }

看起来您的参数是反向的

 comboBox1.Items.Insert(dr.GetString(1) + dr.GetString(2), dr.GetInt32(0));
应该是

 comboBox1.Items.Insert(dr.GetInt32(0), dr.GetString(1) + dr.GetString(2));
以后,请不要在两个线程之间间隔1小时问同一个问题

编辑:这不起作用,因为Items集合的长度可能为零。查看文档,Insert尝试在集合中的特定位置插入

试试这个:

comboBox1.Items.Add(dr.GetString(1) + dr.GetString(2));

insert方法的integer参数指定将插入对象的索引,而不是与字符串关联的值

因此,您需要的是:

    public class cbItem
{
    public string Name;
    public int Value;
    public cbItem(string name, int value)
    {
        Name = name; Value = value;
    }
    public override string ToString()
    {
        // Generates the text shown in the combo box
        return Name;
    }
}
然后您可以使用:

comboBox1.Items.Add(New cbItem(dr.GetString(1) + dr.GetString(2), dr.GetInt32(0)));

你为什么要问两次这个问题?查看dupe-对我来说这似乎是正确的答案:将插入行修改为:comboBox1.Items.insert(dr.GetInt32(0),dr.GetString(1)+dr.GetString(2));这是您当前的首要答案。根据屏幕截图中的错误(“InvalidArgument=Value'1'对'index'无效”),您尝试在索引1=>处插入一个项,它假定索引0处已经有一个项。如果不是,则第一项应该位于索引0No,在这种情况下,您传递的值是comboboxItem的索引,而不是其他(请参阅)。史蒂夫在你上一个问题中的回答应该有效。如果你没有收到对你有帮助的答案,请编辑你的上一个问题,而不是创建一个精确的副本。@Janandersen更新。不过,你不应该每小时问两次同样的问题。如果你没有在一天内得到你想要的答案,一些活动来获得更多的关注是更合适的。