Mostrar datos ordenados en un datagridview

342 views
Skip to first unread message

Duilio

unread,
Nov 15, 2007, 4:49:43 PM11/15/07
to NHibernate-Hispano
Hola lista , mi problema es el siguiente mediante criteria logro
filtrar un conjunto de datos que estan en diferentes tablas por
ejemplo un el nombre del empleado (que esta en la tabla persona) y el
dni (que esta en la tabla DNI . Estos datos los cargo en una clase que
se llama vistaempleado que contiene todos los datos que necesito y la
saco en una lista. El problema viene que cuando quiero mostrar
ordenadamente esta lista (que contiene todas las instancias de los
objetos que cumplieron con el criterio requerido) en un datagridview
enlazado a un ibindingsource me los muestra perfectamente pero no me
permite ordenarlos, aunque yo ponga la propiedad sort del
ibindingsource.
Les agradezco desde ya la ayuda
Saludos
Duilio

Fabio Maulo

unread,
Nov 15, 2007, 6:35:46 PM11/15/07
to NHibernat...@googlegroups.com
El sort lo podes implementar vos o podes usar un pequeño truco.
Si usas listas tipadas NH te devuelve un List<TuTipo>.
Si haces esto:
List<TuTipo> list = (List<TuTipo>) query.List<TuTipo>();
podes usar: list.Sort

Está claro que ese sort vale solo para la lista completa así como está
claro que se trata de un sort hecho en RAM.

Si se trata de un prj WEB y usas el paginado lo mejor es usar el
OrderBy de criteria/query y el Paginator de uNhAddIns.

Bye.
Fabio Maulo

Dario Quintana

unread,
Nov 15, 2007, 6:37:00 PM11/15/07
to NHibernat...@googlegroups.com
Hola, hay varias opciones:

- La más facil, realizá la consulta y que el resultado venga ordenado.
- Podrías usar BindingList en las collecciones para el bindeo con el BindingSource. Creo que Cooperator es un ejemplo vivo de esto, podrías bajarlo de aquí y mirar un poco el codigo. http://cooperator.com.ar/
- Podrías ordenar las collecciones con algún ordenador, si te fijás System.Collections.Generics.List<T> tiene un metodo Sort(...). Yo lo uso en este ordenador que hice:
http://darioquintana.googlecode.com/svn/trunk/Suricato/src/Suricato/Collections/Sorter.cs
Acá tenes los Test para ver como funciona:
http://darioquintana.googlecode.com/svn/trunk/Suricato/src/Suricato.Test/Collections/SorterFixture.cs

Lo podrías usar así:
IList<Foo> orderList = new Sorter<Foo>().With(new OrderByPriceComparer()) .Sort(list);
...
    internal class OrderByPriceComparer : IComparer<Foo>
    {
        public int Compare(Foo x, Foo y) {
            return x.Price.CompareTo(y.Price);
        }
    }

O sino de esta forma via reflection:
IList<Foo> orderList = new Sorter<Foo>().By("Price").Sort(list);



Duilio


--
Dario Quintana
http://darioquintana.com.ar/blogging

Duilio

unread,
Nov 21, 2007, 2:57:55 PM11/21/07
to NHibernate-Hispano
Hola desde ya muchas gracias por sus respuestas pero lamentablemente
sigo sin poder solucionar el problema, implemente el ordenador que me
pasaste Dario (otra ves gracias) y anduvo pero yo necesito ordenar por
mas de una columna o sea por ejemplo ordenar por rubro y dentro de
rubro por articulo. Tambien probe la opcion de pasarle al
bindingsource una bindinglist pero me da un error diciendo que la
propiedad no existe cuando pongo la propiedad sort del bindingsource.
Para peor estoy usando visual basic y todo lo que encuentro esta en
C#.
O sea mi problema es solo encontrar algun tipo de lista tipada que
pueda tomar un resultado de criteria (aunque sea que tenga que
pasarlos uno a uno) y que yo lo ponga como datasource en un
bindingsource enlazado a un datagridview y que los datos puedan ser
ordenados y filtrados como si fueran provenientes de una tabla de un
dataset.
Muchas gracias y disculpen la insistencia con el tema pero debe ser
debido a mi inexperiencia es una tema que no puedo resolver sin su
ayuda
Duilio

Dario Quintana

unread,
Nov 21, 2007, 8:12:17 PM11/21/07
to NHibernat...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages