通过列表框获取SQL数据

时间:2014-04-14 09:03:49

标签: sql listbox

好的,所以我要做的就是单击列表框中的一个项目,该列表框从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;
           }
       }
    }
}

1 个答案:

答案 0 :(得分:0)

您需要使用BindingList<>代替List<>

List<>未实现ListChanged事件,因此当数据源发生更改时,ListBox不会收到通知。

在您的示例中,它看起来像这样:

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

有关详细信息,请查看 BindingList on MSDN