我有一个DataGridView
填充在表单的负载上。我在表单的负载上也填充了ComboBox
。我需要的是当我更改ComboxBox
的值时,DataGridView
会再次填充,但取决于我在ComboBox
上选择的值。
现在它给我一个错误
连接已经打开。
这是我现在的代码。(我正在使用Windows窗体)。
关于我做错了什么的想法?
private void Form1_Load(object sender, EventArgs e)
{
poputateCombo();
populateDatagridView(s);
}
private void populateDatagridView(string s)
{
try
{
string query = "SELECT "values" FROM "table" WHERE seccao = '" + s + "' ";
conexao.Open();
MySqlDataAdapter sda = new MySqlDataAdapter(query, conexao);
DataTable dt1; dt1 = new DataTable();
sda.Fill(dt1);
BindingSource bsource = new BindingSource();
bsource.DataSource = dt1;
dgPlus.DataSource = bsource;
sda.Update(dt1);
conexao.Close();
}
catch (MySqlException er)
{
MessageBox.Show("Error:" + er.ToString());
}
}
private void cbSeccoes_SelectedIndexChanged(object sender, EventArgs e)
{
povoaPlus(cbSeccoes.Text);
}
答案 0 :(得分:0)
当连接处于打开状态时,无法打开连接。因此,请检查连接状态是否未打开,然后仅调用conexao.Open();
if(!(conn.State == ConnectionState.Open))
conexao.Open()
其次,您的代码语法看起来不正确。
string query = "SELECT "values" FROM "table" WHERE seccao = '" + s + "' ";
以上行甚至不会编译。
你可能想写这个
string query = "SELECT values FROM table WHERE seccao = '" + s + "' ";
或者如果您尝试在变量的帮助下发送列名和表名,那么它将是
string query = "SELECT " + values +" FROM " + table +" WHERE seccao = '" + s + "' ";
即使这会编译,但我不建议你使用它。而不是使用参数化查询来避免 SqlInjection
在你的组合框中SelectedIndexChanged
甚至调用绑定datagridview的方法。
private void cbSeccoes_SelectedIndexChanged(object sender, EventArgs e)
{
// I'm not sure what does this method work
//povoaPlus(cbSeccoes.Text);
// I think you should call this
populateDatagridView(string s)
}