2009-04-23 5 views
6

Ich habe Probleme, einen Filter für eine BindingSource, die die DataSource für ein DataGridView-Steuerelement ist, zu arbeiten. Im Grunde habe ich eine LINQ-Abfrage, die die DataSource für die BindingSource ist, und ich möchte die Ergebnisse filtern. Unten ist ein Beispiel für das, was ich erreichen möchte.Wie filtere ich eine BindingSource mit einer LINQ-Abfrage als die 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 

So kann ich alle Zeilen in der Datagridview-Steuerung sehen, aber die Filter haben keine Wirkung. Wenn ich die DataSource der BindingSource so umschalte, dass sie eine DataTable verwendet, funktioniert die Filterung wie erwartet. Was vermisse ich?

Antwort

4

Aus der Dokumentation Binding:

Typischerweise in komplexen Datenbindungs ​​ Szenarien verwendet wird, ermöglicht die Filtereigenschaft Sie eine Teilmenge der Datasource anzuzeigen. Nur zugrunde liegende Listen, die implementieren die IBindingListView Schnittstelle unterstützen Filterung