2009-04-23 17 views
6

Tengo problemas para hacer que un filtro funcione en un BindingSource que es el DataSource para un control DataGridView. Básicamente, tengo una consulta LINQ que es el DataSource para BindingSource y me gustaría filtrar los resultados. A continuación se muestra un ejemplo de lo que estoy tratando de lograr.Cómo filtrar un BindingSource con una consulta LINQ como el 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 

Por lo tanto, puedo ver todas las filas en el control DataGridView pero el filtro no tiene ningún efecto. Si cambio el DataSource de BindingSource para usar una DataTable, entonces el filtrado funciona como se espera. ¿Qué me estoy perdiendo?

Respuesta

4

De la documentación BindingSource:

usa típicamente en complejos escenarios de enlace de datos, la propiedad Filter permite le permite ver un subconjunto de la origen de datos. Solo las listas subyacentes que implementan la interfaz de IBindingListView admiten filtrado de la interfaz

Cuestiones relacionadas