C# 无法在Datagridview中填充组合框

C# 无法在Datagridview中填充组合框,c#,C#,我有一个项目,它需要选择组合框上的数据库列表,并在Datagridview中显示它。这是我的密码: private void Form2_Load(object sender, EventArgs e) { OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" + @"data source= D:\Database\đồ án\Đồ

我有一个项目,它需要选择组合框上的数据库列表,并在Datagridview中显示它。这是我的密码:

 private void Form2_Load(object sender, EventArgs e)
            {
                OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" + @"data source= D:\Database\đồ án\Đồ án.mdb");
                DataTable dt = new DataTable();
                DataSet ds = new DataSet();
                ds.Tables.Add(dt);
                OleDbDataAdapter da = new OleDbDataAdapter("Select * from Sheet1", con);
                da.Fill(dt);
                da.Dispose();

                comboBox1.DataSource = dt;
                comboBox1.DisplayMember = "Tên đề tài";
                comboBox1.ValueMember = "Mã đề tài";
            }

 private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e)
        {
            OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" + @"data source= D:\Database\đồ án\Đồ án.mdb");

            DataTable dt = new DataTable();
            DataSet ds = new DataSet();
            ds.Tables.Add(dt);
            OleDbDataAdapter da = new OleDbDataAdapter("Select * from Sheet11 Where Mã đề tài = "+comboBox1.SelectedValue, con);
            da.Fill(dt);
            da.Dispose();
            dataGridView1.DataSource = dt;
        }
当我运行此程序并单击Combobox时,它显示一个错误:

起初,我以为数据库中的两张表(表)并没有显示,也并没有关系,但当我完成并尝试重新开始时,它又显示了一个错误。我怎样才能修好它

2重要注意事项:

  • 使用参数而不是字符串连接
  • 在列名上使用空格是不好的做法。如果是,请使用括号
  • 考虑到上述情况,请尝试:

    string query="Select * from Sheet11 Where [Mã đề tài] = @param";
    OleDbCommand command = new OleDbCommand(query, con);
    cmd.Parameters.Add(new OleDbParameter("@param", comboBox1.SelectedValue))
    
    2重要说明:

  • 使用参数而不是字符串连接
  • 在列名上使用空格是不好的做法。如果是,请使用括号
  • 考虑到上述情况,请尝试:

    string query="Select * from Sheet11 Where [Mã đề tài] = @param";
    OleDbCommand command = new OleDbCommand(query, con);
    cmd.Parameters.Add(new OleDbParameter("@param", comboBox1.SelectedValue))
    
    除了“列名中的空格”错误外,设置组合框时,绑定的顺序也错误

    您需要先设置成员,然后只设置数据源。所以改变

    comboBox1.DataSource = dt;
    comboBox1.DisplayMember = "Tên đề tài";
    comboBox1.ValueMember = "Mã đề tài";
    
    致:

    现在并不是整个表都绑定了,而是只绑定了所需的列

    在此之前,
    SelectedValue
    不是单个值,而是一个完整的
    DataRowView
    ,您必须从中选择正确的项/列

    而且,由于它是一个引用对象,将其强制转换为字符串(隐式使用
    +
    运算符或显式使用
    ToString
    调用)只会导致类名
    而不是数据值

    进一步说明:

    • 避免在任何类型的名称中使用空格;一些现代化的系统可能会使用它们,但这会降低代码的健壮性。非ascii字符也是如此

    • 虽然此处查询中的值仅来自数据库,但建议仅使用参数化查询以避免任何sql注入

    • 由于您已经将数据加载到
      数据表中
      ,您也可以过滤它们,而无需再次返回数据库。为此,使用
      RowFilter
      创建
      BindingSource
      DataView
      ,并将DGV绑定到它。为此,将
      数据表
      设为类变量

    除了“列名中的空格”错误之外,设置组合框时,绑定的顺序也错误

    您需要先设置成员,然后只设置数据源。所以改变

    comboBox1.DataSource = dt;
    comboBox1.DisplayMember = "Tên đề tài";
    comboBox1.ValueMember = "Mã đề tài";
    
    致:

    现在并不是整个表都绑定了,而是只绑定了所需的列

    在此之前,
    SelectedValue
    不是单个值,而是一个完整的
    DataRowView
    ,您必须从中选择正确的项/列

    而且,由于它是一个引用对象,将其强制转换为字符串(隐式使用
    +
    运算符或显式使用
    ToString
    调用)只会导致类名
    而不是数据值

    进一步说明:

    • 避免在任何类型的名称中使用空格;一些现代化的系统可能会使用它们,但这会降低代码的健壮性。非ascii字符也是如此

    • 虽然此处查询中的值仅来自数据库,但建议仅使用参数化查询以避免任何sql注入

    • 由于您已经将数据加载到
      数据表中
      ,您也可以过滤它们,而无需再次返回数据库。为此,使用
      RowFilter
      创建
      BindingSource
      DataView
      ,并将DGV绑定到它。为此,将
      数据表
      设为类变量


    是的,列名有空格,因此它们需要用撇号或括号括起来。(该评论实际上不是一个问题,而是一个链接)是的,列名有空格,因此它们需要用撇号或括号括起来。(这个评论实际上不是一个问题,而是一个链接)谢谢你,但它没有起作用。嗯,当我点击一个组合框时,它需要显示一个数据库列表,并帮助您选择一个数据库,它显示在datagridview中。它显示:“一个或多个必需的参数没有给定值”好的,让我试着问一下,当问到这里时,它真的很重要,例如,您遇到了什么错误。所以告诉我们:它再次表明错误是非常无用的。但是,在更正空格错误后,请查看我的第二个错误的答案。对不起,我的错误:(谢谢,但它不起作用。嗯,当我单击组合框时,它需要显示一个数据库列表,并帮助您选择一个数据库,它显示在datagridview中。它显示:“没有为一个或多个必需参数提供值”好的,让我试一试,当我在这里提问时,你会得到什么错误真的很重要。所以告诉我们:它再次显示错误是非常无用的。但是,在更正空格错误之后,请查看我对你得到的第二个错误的回答。对不起,我的错误:(这不起作用,但我试着问我的老师这个错误。非常感谢你帮我纠正这个错误。这不起作用,但我试着问我的老师这个错误。非常感谢你帮我纠正这个错误。