C# c从组合框SQL填充复选框

C# c从组合框SQL填充复选框,c#,sql,combobox,checkedlistbox,C#,Sql,Combobox,Checkedlistbox,我在c中有一个winform应用程序,它从SQL server数据库获取值。 我可以在组合框中获得我想要的值,但根据所做的选择,我想在checkedcombobox中显示相应的sql行,以便用户选择所需的sql行。 我的代码是:填充组合框 SqlDataAdapter SDA = new SqlDataAdapter("select distinct desempenho from vidros", con); DataTable DTT = new DataTable();

我在c中有一个winform应用程序,它从SQL server数据库获取值。 我可以在组合框中获得我想要的值,但根据所做的选择,我想在checkedcombobox中显示相应的sql行,以便用户选择所需的sql行。 我的代码是:填充组合框

    SqlDataAdapter SDA = new SqlDataAdapter("select distinct desempenho from vidros", con);
    DataTable DTT = new DataTable();
    SDA.Fill(DTT);
    desempenho.Items.Clear();
    foreach (DataRow ROW in DTT.Rows)
    {
        desempenho.Items.Add(ROW["desempenho"].ToString());
    }
和:在checkedcombobox中显示所选行,该组合框不工作

 private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            SqlDataAdapter sda = new SqlDataAdapter("select desc from vidros where desempenho ='" + desempenho.Text + "'", con);
            DataTable DTT = new DataTable();
            sda.Fill(DTT);
            checkedListBox1.Items.Clear();
            foreach (DataRow AB in DTT.Rows)
            {
                checkedListBox1.Items.Add(AB["desc"].ToString());
            }
        }
这是让用户选择多个项目的最佳方式吗? 有人知道代码可能有什么问题吗


提前感谢。

这个错误迟早会发生在每个人身上

DESC实际上是任何现有数据库系统中的保留关键字。它在ORDERBY子句中用于将结果按降序排列

因此,如果您确实有一个以这种方式命名的字段,最好尽快更改该名称,您需要将其包含在转义字符中Sql Server使用方形括号

SqlDataAdapter sda = new SqlDataAdapter(@"select [desc] 
       from vidros where desempenho ='" + desempenho.Text + "'", con);
我还建议使用参数化查询。在您的情况下,您应该相对安全,但最好完全避免sql注入的任何可能性

SqlDataAdapter sda = new SqlDataAdapter(@"select [desc] 
       from vidros where desempenho = @emp", con);
sda.SelectCommand.Parameters.Add("@emp", SqlDbType.NVarChar).Value = desempenho.Text;
 .....

看起来绑定列表框的代码放在了错误的位置。 如果要基于combobox的选定项绑定listbox,则需要在combobox的SelectedIndexChanged事件中写入该逻辑

如果将代码移动到组合框的SelectedIndexChanged事件处理程序,如下所示

private void desempenho_SelectedIndexChanged(object sender, EventArgs e)
    {
        SqlDataAdapter sda = new SqlDataAdapter("select desc from vidros where desempenho ='" + desempenho.Text + "'", con);
        DataTable DTT = new DataTable();
        sda.Fill(DTT);
        checkedListBox1.Items.Clear();
        foreach (DataRow AB in DTT.Rows)
        {
            checkedListBox1.Items.Add(AB["desc"].ToString());
        }
    }

将此处理程序附加到处理程序的SelectedIndexChanged事件,它应该可以解决问题。

还有什么不起作用?你能解释一下这个代码有什么问题吗?@Steve抱歉解释得不好。我的问题是,当我从组合框中选择一个项目时,checkedlistbox中没有显示任何内容。您确定没有引发异常吗?该DESC字段名是一个保留关键字,按原样使用会触发异常。我建议使用调试器检查是否确实调用了事件处理程序,以及事件代码中组合框文本的值。为什么您的代码在listbox的selectedindexchanged事件中?它应该在comboboxhi的selectedindexchanged中。感谢您的帮助,不幸的是,checkedlistbox仍然不显示任何结果。