Pregunta

¿Alguien puede sugerir una buena implementación de una clase de colección genérica que implemente el IBindingListView & IBindingList interactúa y proporciona capacidades de filtrado y búsqueda?

Veo mis opciones actuales como:

  • Usar una clase que otra persona ha escrito y probado
  • Heredando de BindingList<T>, e implementar el IBindingListView interfaces
  • Escribe una colección personalizada desde cero, implementando IBindingListView y IBindingList.

Evidentemente, la primera opción es mi preferida.

¿Fue útil?

Solución

Utilicé y construí una implementación que encontré en una antigua publicación del foro de MSDN de hace unos años, pero recientemente busqué nuevamente y encontré un proyecto de Sourceforge llamado Vista de lista vinculante.Se ve bastante bien, solo que todavía no lo he instalado para reemplazar mi versión pirateada.

paquete nuget: Equin.ApplicationFramework.BindingListView

Código de ejemplo:

var lst = new List<DemoClass>
{
    new DemoClass { Prop1 = "a", Prop2 = "b", Prop3 = "c" },
    new DemoClass { Prop1 = "a", Prop2 = "e", Prop3 = "f" },
    new DemoClass { Prop1 = "b", Prop2 = "h", Prop3 = "i" },
    new DemoClass { Prop1 = "b", Prop2 = "k", Prop3 = "l" }
};
dataGridView1.DataSource = new BindingListView<DemoClass>(lst);
// you can now sort by clicking the column headings 
//
// to filter the view...
var view = (BindingListView<DemoClass>)dataGridView1.DataSource;            
view.ApplyFilter(dc => dc.Prop1 == "a");

Otros consejos

Aquí está la ayuda para su método 2 y 3 detrás de escena:Implementación de filtrado para el enlace de datos de Windows Forms

http://www.microsoft.com/downloads/details.aspx?FamilyID=4af0c96d-61d5-4645-8961-b423318541b4&displaylang=en

Se me ocurren un par de soluciones:

  1. El Proyecto subsónico tiene una implementación bastante buena de BindlingList<T> que es de código abierto.Aunque esto podría requerir el uso de todo el binario SubSonic para usar su implementación.

  2. Disfruto usando las clases del Colecciones de poder proyecto.Es bastante sencillo heredar de una de las colecciones base allí e implementar IBindingListView.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top