【问题标题】:Multiple selection on a checkboxlist to filter a datatable vb.net复选框列表上的多项选择以过滤数据表 vb.net
【发布时间】:2012-03-17 10:22:22
【问题描述】:

希望你一切都好。

我有一个从数据库加载的数据表。我将数据表绑定到 page_load 上的网格视图。现在我想通过用户选择过滤网格视图,所以我制作了一个复选框列表并在 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()

使用上面的这段代码,它可以过滤复选框列表中只有一个选项。我尝试自己循环复选框列表,但总是以错误告终。希望有人可以帮助我完成这项工作。

非常感谢。

L

这是我拥有的数据表的示例

【问题讨论】:

    标签: asp.net vb.net datatable dataset checkboxlist


    【解决方案1】:

    因为您已经使用了带有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-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
    

    【讨论】:

    • Tim ...这确实是出色的工作。我尝试了 datatable.select ,它就像魔术一样工作。也非常感谢附加功能(LINQ)。我正在尝试使用更多的 LINQ,但对我来说仍然很难。祝你有美好的一天。
    猜你喜欢
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2020-07-07
    • 2020-10-09
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多