2009-04-23 5 views
6

Je n'arrive pas à obtenir un filtre pour fonctionner sur un BindingSource qui est le DataSource pour un contrôle DataGridView. Fondamentalement, j'ai une requête LINQ qui est la source de données pour le BindingSource et je voudrais filtrer les résultats. Voici un exemple de ce que j'essaie d'accomplir.Comment filtrer un BindingSource avec une requête LINQ en tant que DataSource

Dim query = From row In dataTable _ 
      Select New MyRow(row) 

Dim bs As New BindingSource() 
bs.DataSource = query.ToList() 

grid.DataSource = bs 

bs.Filter = "Col1 = 'value'" 

...

Public Class MyRow 
    Private _key As String 
    Private _col1 As String 

    Public Sub New(ByVal row As DataTableRow) 
     _key = GetNewKeyValue() 
     _col1 = row.Col1 
    End Sub 

    Public ReadOnly Property Key() As String 
     Get 
      Return _key 
     End Get 
    End Property 

    Public ReadOnly Property Col1() As String 
     Get 
      Return _col1 
     End Get 
    End Property 
End Class 

Alors, je peux voir toutes les lignes dans le contrôle DataGridView mais le filtre n'a pas d'effet. Si je permets à DataSource de BindingSource d'utiliser un DataTable, le filtrage fonctionne comme prévu. Qu'est-ce que je rate?

Répondre

4

De la documentation BindingSource:

Généralement utilisé dans les données de liaison complexes scénarios, la propriété Filter permet vous d'afficher un sous-ensemble de la DataSource. Seules les listes sous-jacentes qui implémentent le filtrage de prise en charge d'interface IBindingListView

Questions connexes