2014-04-14 81 views
0

好的,所以我想要做的是單擊列表框中的一個項目,該列表框從sql數據庫中獲取數據,具體取決於用戶鍵入到文本框中。通過列表框獲取SQL數據

現在,當我在第一個列表框中單擊該項目時,需要有關該項目的更多信息才能顯示在第二個列表框中。 當用戶在文本框中輸入一個名字時,會顯示出前10個字符,現在我已經有了,我需要點擊其中一個項目並在下一個列表框中獲取該客戶端的'任務'。任務是數據庫中的MATTERS。

我很確定我的代碼是正確的,我沒有錯誤,但沒有顯示在列表框中。

這裏是我的代碼:

private void listBox1_SelectedValueChanged(object sender, EventArgs e) 
{ 
    string item = listBox1.SelectedItem.ToString(); 

    if (listBox1.ContainsFocus) 
    { 
     if (item == "") 
     { 

     } 
     else 
     { 
      var con2 = Conn.ConnString(); 

      using (SqlConnection myConnection2 = new SqlConnection(con2)) 
      { 
       string oString2 = "select CLIENTMATTERS.MATTER, CLIENTMATTERS.DESCRIPTION from CLIENTMATTERS join CLIENTCODES on CLIENTMATTERS.CLIENT = CLIENTCODES.CLIENT Where CLIENTCODES.DESCRIPTION = '@code1'"; 


       SqlCommand oCmd = new SqlCommand(oString2, myConnection2); 
       oCmd.Parameters.AddWithValue("@code1", item); 
       myConnection2.Open(); 

       oCmd.Connection.Open(); 
       List<string> codelist2 = new List<string>(); 

       using (SqlDataReader oReader2 = oCmd.ExecuteReader()) 
       { 
        if (oReader2.HasRows) 
        { 
        string value = string.Empty; 
        while (oReader2.Read()) 
        { 
         codelist2.Add(oReader2["MATTER"].ToString()); 
        } 
        } 
       } 

       this.listBox2.DataSource = codelist2; 
      } 
     } 
    } 
} 

回答

0

您需要使用BindingList<>,而不是List<>

List<>沒有實現ListChanged事件,因此在數據源更改時不會收到通知。

在您的例子就應該是這樣的:

BindingList<string> codelist2 = new BindingList<string>(); 

欲瞭解更多信息,看看 BindingList on MSDN