2017-02-09 99 views
1

我有哈winform app在c#巫婆从SQL服务器数据库中获取值。 我可以得到我想要在combobox中显示的值,但取决于所做的选择,我想在checkedcombobox中显示相应的sql行以供用户选择所需的值。 代码我有是:(填充组合框)c#从combobox填充checkelistbox 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()); 
      } 
     } 

这是最好的方式让用户选择几个项目? 有人知道代码可能会出现什么问题吗?

在此先感谢。

+0

什么不行?你能解释一下这个代码有什么问题吗? – Steve

+0

@对不起的解释抱歉。我遇到的问题是,当我从组合框中选择一个项目时,没有任何内容出现在checkedlistbox中。 – septaug

+0

你确定没有抛出异常吗?该DESC字段名称是一个保留关键字,按原样使用应引发异常。 – Steve

回答

1

看起来像结合列表框在不正确的地方是把代码。 如果您想要根据选定的组合框项目来绑定列表框,则需要在组合框的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事件,它应该解决问题。

1

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

DESC是实际上任何存在的数据库系统中的保留关键字。它在ORDER BY子句中用于使结果按顺序递减。

所以,如果你真的有那样的(更好的变化,尽快这个名字),你需要它括在避开字符命名的字段(SQL Server使用方brakets)

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; 
..... 
+0

嗨感谢您的帮助,不幸的是,checkedlistbox仍然不显示任何结果。 – septaug