2015-10-13 78 views
0

我无法正确过滤列表框项目。通过ListBox项过滤SQL数据以在DataGridViews中显示

基本上,我想单击我的ListBox中的一个项目,并相应地填充DataGridView。我有2个DataGridViews,它将根据所选的ListBox项目显示不同的标准。

到目前为止我的代码如下:

Public Class Form1 

    Dim str As String = "Data Source=XXXXX;Initial Catalog=XXXXXX;Integrated Security=True" 
    Dim con As New SqlConnection(Str) 
    Dim com As String = "Select swname, numoflic from SW2" 
    Dim com2 As String = "Select name, instdate, swinsta, organ from Assigned2" 
    Dim Adpt As New SqlDataAdapter(com, con) 
    Dim Adpt2 As New SqlDataAdapter(com2, con) 
    Dim ds, ds2 As New DataSet() 

Private Sub ListBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListBox1.SelectedIndexChanged 
    Dim dt As DataTable 
    dt = New DataTable("SW2") 

    'DEFINING LISTBOX ITEM AS STRING 
    Dim curItem As String = ListBox1.SelectedItem.ToString() 

    ds.Tables.Clear() 
    ds2.Tables.Clear() 

    Adpt.Fill(ds, "ContactPerson2") 
    DataGridView1.DataSource = ds.Tables(0) 

    Adpt2.Fill(ds2, "Assigned2") 
    DataGridView2.DataSource = ds2.Tables(0) 

End Sub 

回答

0

你需要筛选数据的设置和前面here。另外,我建议你不要在事件处理程序中填充你的数据表。在Form_Load中加载它们,然后将Nothing传递给过滤器,以清除SelectedIndexChanged事件处理程序开始处的任何先前的过滤器。

+0

感谢您的帮助!这非常有用。我会发布我的解决方案。我改变了一下代码 – CinNL1

0

我改变了一下代码,现在适合我的是下面的代码。

Dim curItem As String = ListBox1.SelectedItem(1) 
    Dim sqlConnectionString As String = "Data Source=XXXX;Initial Catalog=XXXXX;Integrated Security=True" 
    Dim sqlSelect As String = "Select swname, number from SW" 
    Dim da As New SqlDataAdapter(sqlSelect, sqlConnectionString) 
    Dim dt As New DataTable 

    da.Fill(dt) 

    'filter setting defined here 
    Dim filter As String = "swname = '" + curItem + "'" 

    'filter rows 
    Dim FilteredRows As DataRow() = dt.Select(filter) 

    For Each row As DataRow In FilteredRows 
     DataGridView1.DataSource = FilteredRows.CopyToDataTable() 

    Next