Asp.net 在复选框列表上进行多项选择以筛选datatable vb.net

Asp.net 在复选框列表上进行多项选择以筛选datatable vb.net,asp.net,vb.net,datatable,dataset,checkboxlist,Asp.net,Vb.net,Datatable,Dataset,Checkboxlist,希望你做得很好 我有一个从数据库加载的数据表。我将datatable绑定到加载页面上的gridview。现在我想通过用户选择过滤gridview,所以我制作了一个复选框列表,并在CheckBoxList1\u SelectedIndexChanged中编写了如下代码 Dim selectedartist As String = CheckBoxList1.SelectedItem.ToString() Dim dTable As DataTable = Session("dTab

希望你做得很好

我有一个从数据库加载的数据表。我将datatable绑定到加载页面上的gridview。现在我想通过用户选择过滤gridview,所以我制作了一个复选框列表,并在CheckBoxList1\u 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

这是我所拥有的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

或者在方法语法中(在VB.NET中不太可读)

最后,NET 2.0方法:

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
Dim被选为新列表(字符串)
对于CheckBoxList1.Items中的每个项目作为ListItem
如果选择了项目,则
selected.Add(String.Format(“{0}”,item.Text))
如果结束
下一个
如果选中,则计数0
尺寸行=数据表。选择(String.Format(
"(0)中的宋_艺人",,
String.Join(“,”选定)))
如果rows.Length为0,则
Dim tblFiltered=行。CopyToDataTable()
如果结束
如果结束

因为您已经将数据表扩展名与
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

或者在方法语法中(在VB.NET中不太可读)

最后,NET 2.0方法:

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
Dim被选为新列表(字符串)
对于CheckBoxList1.Items中的每个项目作为ListItem
如果选择了项目,则
selected.Add(String.Format(“{0}”,item.Text))
如果结束
下一个
如果选中,则计数0
尺寸行=数据表。选择(String.Format(
"(0)中的宋_艺人",,
String.Join(“,”选定)))
如果rows.Length为0,则
Dim tblFiltered=行。CopyToDataTable()
如果结束
如果结束

Tim。。。这确实是一部出色的作品。我尝试了datatable.select,它的效果非常神奇。非常感谢临时演员(LINQ)。我正在尝试使用更多的LINQ,但对我来说仍然很难。祝你今天愉快。蒂姆。。。这确实是一部出色的作品。我尝试了datatable.select,它的效果非常神奇。非常感谢临时演员(LINQ)。我正在尝试使用更多的LINQ,但对我来说仍然很难。祝您有个美好的一天。