Estoy tratando de filtrar un BindingSource con un BindingList como origen de datos. Traté de BindingSource.Filtro = ‘Text Condición» Pero no funciona, no pasa nada, los datos de la pantalla sigue siendo el mismo. Pero si yo uso un conjunto de datos como el origen de datos funciona. Es posible filtrar una lista de objetos con el BindingSource.Filtro de propiedad?

Tengo la siguiente clase:

class Person
        {
            public String Nombre { get; set; }
            public String Apellido { get; set; }
            public int DNI { get; set; }
            public int Edad { get; set; }
            public Decimal Tamano { get; set; }
        }

Esta es la forma en que lo uso:

BindingList<Person> personas = new BindingList<Person> { 
                new Person{ Apellido = "App1", DNI = 3011, Edad = 20, Nombre ="Name1", Tamano = new decimal(1.7)}
                ,new Person{ Apellido = "App2", DNI = 1520, Edad = 30, Nombre ="Name2", Tamano = new decimal(1.5)}
                ,new Person{ Apellido = "App3", DNI = 5654, Edad = 21, Nombre ="Name3", Tamano = new decimal(1.6)}
                ,new Person{ Apellido = "App4", DNI = 778, Edad = 40, Nombre ="Name4", Tamano = new decimal(1.68)}
            };

            BindingSource bs = new BindingSource();
            bs.DataSource = personas;
            grid.DataSource = bs;

            bs.Filter = "Apellido like 'App1'";

Esto es sólo un ejemplo, la idea es probar si se puede filtrar un origen de datos como ese. Voy a utilizar el conocimiento dentro de un nuevo proyecto.

pd: La idea es ser capaz de utilizar BindingSource.Filtro si es posible.

OriginalEl autor Müsli | 2012-04-09

3 Comentarios

  1. 7

    Como por http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.filter.aspx

    Sólo listas subyacentes que implementan la IBindingListView de la interfaz de filtrado.

    BindingList<T> no aparece para implementar IBindingListView – y ya que es el lista subyacente, su colección no filtro.

    BindingSource clase, mientras que no es genérica, no implementar esta Interfaz, así que trate de usar esto como en personas de la colección. Tengo la sensación de que simplemente la asignación de un nuevo BindingSource del origen de datos a un BindingList no es suficiente, ya que no cambia la lista subyacente. Probar:

    BindingSource personas = new BindingSource { new Person{ ... }, ... };
    Gracias!!! Con su información me encontré con una aplicación de IBindingListView y funciona. Aquí está el enlace: blogs.msdn.com/b/winformsue/archive/2008/05/19/…
    Me encontré con este par de años y esta solución funcionó bien para mí. Hoy en día yo estaba usando el mismo código, simplemente con un poco de diferencia: se necesitan dos datagridviews exhibir el mismo FilteredBindingList con diferentes filtrado / opciones de clasificación. alguna idea sobre cómo lograr esto?

    OriginalEl autor Alain

  2. 2

    Como una alternativa a la implementación de IBindingListView que puede ser muy involucrados usted puede probar este tipo de filtro:

    BindingList<Person> personas = new BindingList<Person> {  
    new Person{ Apellido = "App1", DNI = 3011, Edad = 20, Nombre ="Name1", Tamano = new decimal(1.7)} 
    ,new Person{ Apellido = "App2", DNI = 1520, Edad = 30, Nombre ="Name2", Tamano = new decimal(1.5)} 
    ,new Person{ Apellido = "App3", DNI = 5654, Edad = 21, Nombre ="Name3", Tamano = new decimal(1.6)} 
    ,new Person{ Apellido = "App4", DNI = 778, Edad = 40, Nombre ="Name4", Tamano = new decimal(1.68)} 
    };
    
    BindingList<Person> filtered = new BindingList<Person>(personas.Where(
                                     p => p.Apellido.Contains("App1")).ToList());
    grid.DataSource = filtered;
    Gracias! Esa es una alternativa. Pero la idea es ser capaz de utilizar el BindingSource.Filtro De Propiedad. Gracias por su tiempo

    OriginalEl autor Brad Rem

  3. 1

    Yo creo que es porque el BindingSource no sabe qué tipo de datos se trata de filtrado. Una vez que los datos se convierten en un conjunto de datos en columnas y filas, el filtro puede ejecutar. Debido a su origen de datos es una clase, no puede hacer el filtrado automático.

    Gracias por su tiempo e información.

    OriginalEl autor iefpw

Dejar respuesta

Please enter your comment!
Please enter your name here