在ComboBox选择时填充DataGridview

时间:2014-02-14 10:34:54

标签: c# datagridview combobox

我有一个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);
}

1 个答案:

答案 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)
}
相关问题