簡體   English   中英

在復選框列表中進行多項選擇以篩選數據表vb.net

[英]Multiple selection on a checkboxlist to filter a datatable vb.net

希望你一切都好。

我有一個從數據庫加載的數據表。 我將數據表綁定到page_load上的gridview。 現在,我想通過用戶選擇來過濾gridview,所以我創建了一個復選框列表,並在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()

有了上面的這段代碼,它可以過濾復選框列表中是否只有一個選項。 我嘗試自己循環檢查清單,但總是以錯誤告終。 希望有人可以幫助我完成這項工作。

非常感謝。

大號

這是我擁有的數據表的示例

資料集

因為您已經在CopyToDataTable使用了DataTable擴展名:

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到數據集

或方法語法(在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM