C# 无法在Datagridview中填充组合框
我有一个项目,它需要选择组合框上的数据库列表,并在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\Đồ
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
,并将DGV绑定到它。为此,将DataView
设为类变量数据表
comboBox1.DataSource = dt;
comboBox1.DisplayMember = "Tên đề tài";
comboBox1.ValueMember = "Mã đề tài";
致:
现在并不是整个表都绑定了,而是只绑定了所需的列
在此之前,SelectedValue
不是单个值,而是一个完整的DataRowView
,您必须从中选择正确的项/列
而且,由于它是一个引用对象,将其强制转换为字符串(隐式使用+
运算符或显式使用ToString
调用)只会导致类名
而不是数据值
进一步说明:
- 避免在任何类型的名称中使用空格;一些现代化的系统可能会使用它们,但这会降低代码的健壮性。非ascii字符也是如此
- 虽然此处查询中的值仅来自数据库,但建议仅使用参数化查询以避免任何sql注入
- 由于您已经将数据加载到
,您也可以过滤它们,而无需再次返回数据库。为此,使用数据表中
创建RowFilter
或BindingSource
,并将DGV绑定到它。为此,将DataView
设为类变量数据表