2017-02-09 127 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