2012-02-27 90 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