0

问题是当我在我的combobox1上选择一家公司时,该公司的所有项目都应该在combobox2上输出。但不是当我在我的comboBox1 上选择一家公司时,它只在comboBox2 上输出1project。我想输出那家公司的所有项目。

这是我在project_name特定公司上选择的代码

if (e.Button == MouseButtons.Left)
{
    SqlConnection conn = new SqlConnection(connString);
    conn.Open();
    string query = "select project_name" +
                   "from JO.dbo.Proj left join JO.dbo.Comp" +
                   "on Proj.company_id = Comp.company_id" +
                   "where company_name = '" + comboBox1.SelectedItem + "'";
    SqlCommand command = new SqlCommand(query, conn);
    SqlDataReader reader = command.ExecuteReader();
    if (reader.HasRows)
    {
        while (reader.Read())
        {
            comboBox2.Text = reader["project_name"].ToString();
        }
        reader.Close();
    }
    conn.Close();
    conn.Dispose();
}
4

3 回答 3

1

不要设置comboBox2.Text 属性,而是将项目名称添加到combobox2.Items。

       {
        SqlConnection conn = new SqlConnection(connString);
        conn.Open();
        string query = "select project_name from JO.dbo.Proj left join JO.dbo.Comp on Proj.company_id = Comp.company_id where company_name = '" + comboBox1.SelectedItem + "'";
        SqlCommand command = new SqlCommand(query, conn);
        SqlDataReader reader = command.ExecuteReader();
        if (reader.HasRows)
        {
            comboBox2.Items.Clear();
            while (reader.Read())
            {
                comboBox2.Items.Add(reader["project_name"].ToString());
            }
            reader.Close();
        }
        conn.Close();
        conn.Dispose();
    }
于 2013-08-02T06:25:04.570 回答
0

这是强制性的“不要将数据连接到 sql”警告;搜索“bobby tables”以了解您在这里做的非常非常错误的事情;但是,为了有所帮助 - 这里有一个关于如何减少所涉及的代码获得正确答案的建议:

var projects = connection.Query<string>(
      @"select project_name
        from JO.dbo.Proj left join JO.dbo.Comp
          on Proj.company_id = Comp.company_id
        where company_name = @companyName",
      new { companyName = comboBox1.SelectedItem }).ToList();

在这条线之后,projectsList<string>该公司所有项目中的一个;请注意如何@companyName参数化以防止 SQL 注入。这使用了dapperQuery<T>(this DBConnection, ...)提供的扩展方法- 在 NuGet 上免费提供。

一旦你有了,List<string>你就可以简单地添加那些组合框。

于 2013-08-02T07:07:37.783 回答
0

为什么不将数据转换为实体列表并将该实体绑定到组合框。您尝试做的不是将数据绑定到组合框的正确方法

基本上 ComboBox.Text 属性:获取或设置与此控件关联的文本。

更多详情请参考:

MSDN

于 2013-08-02T06:25:04.937 回答