2012-02-27 116 views
1

希望你做得很好。多選複選框列表過濾數據表vb.net

我有一個從數據庫加載的數據表。我將數據表綁定到page_load上的gridview。現在我想篩選由用戶選擇的GridView的,所以我做了一個CheckBoxList的,寫一些代碼如下在CheckBoxList1_SelectedIndexChanged

Dim selectedartist As String = CheckBoxList1.SelectedItem.ToString() 
    Dim dTable As DataTable = Session("dTable") 
    Dim dTablenew As New DataTable 

    Dim str As String = "Song_Artist ='" & selectedartist & "'" 
    dTablenew = dTable.Select(str).CopyToDataTable 

    GridView1.DataSource = dTablenew 
    GridView1.DataBind() 

通過上面這段代碼,它可以過濾如果只有一個在CheckBoxList的選擇。我嘗試自己循環checkboxlist,但始終以錯誤結束。希望有人能幫助我完成這項工作。

非常感謝。

大號

這是DataTable的例子,我有

dataset

回答

1

因爲你已經使用的DataTable擴展與CopyToDataTable

Dim rows = From row In dTable.AsEnumerable() 
      From item In CheckBoxList1.Items.Cast(Of ListItem)() 
      Where item.Selected = True AndAlso _ 
      row.Field(Of String)("Song_Artist") = item.Text 
      Select row 
If rows.Any() Then 
    Dim tblFiltered = tbl.CopyToDataTable() 
End If 

LINQ-To-DataSet

或在方法的語法(在VB.NET不是很可讀)

Dim selected = CheckBoxList1.Items.Cast(Of ListItem). 
       Where(Function(i) i.Selected = True). 
       Select(Function(i) i.Text) 
If selected.Any() Then 
    Dim rows = dTable.AsEnumerable(). 
     Where(Function(r) selected.Contains(r.Field(Of String)("Song_Artist"))) 
    If rows.Any() Then 
     Dim tblFiltered = rows.CopyToDataTable() 
    End If 
End If 

最後,NET 2.0 DataTable.Select方法:

Dim selected As New List(Of String) 
For Each item As ListItem In CheckBoxList1.Items 
    If item.Selected Then 
     selected.Add(String.Format("'{0}'", item.Text)) 
    End If 
Next 
If selected.Count <> 0 Then 
    Dim rows = dTable.Select(String.Format(
       "Song_Artist IN ({0})", 
       String.Join(",", selected))) 
    If rows.Length <> 0 Then 
     Dim tblFiltered = rows.CopyToDataTable() 
    End If 
End If 
+0

添......這的確是輝煌而努力。我嘗試datatable.select,它的作用就像魔術一樣。非常讚賞額外(LINQ)。我正在嘗試使用更多的LINQ,但對我來說仍然很難。祝你今天愉快。 – lawphotog 2012-02-28 11:41:15