Tip: Mostrar objetos relacionados en DevExpress GridControl

DevExpress🙂
Hola de nuevo,

Hoy os voy a mostrar un pequeño tip, muy útil si trabajáis con este fantástico control.

En muchas ocasiones nos encontramos con la necesidad de mostrar una serie de registros de una tabla, y también queremos mostrar información de otras tablas relacionadas. En estos casos existen varias soluciones: Leer los datos de ambas tablas con una instrucción JOIN en la base de datos y mostrar la información extendida en el grid, agregar a la vista un ‘ColumnEdit’ de tipo ComboBox o LookUpEdit y cargar los datos de la tabla relacionada, interceptar el evento ‘CustomColumnDisplayText’ de la columna y mostrar los valores que deseemos, y unos cuantos más que no comentaremos aquí.

Sin embargo existe una solución mucho más sencilla (aunque no he encontrado nada de documentación al respecto). Se trata de extender la propiedad FieldName de la columna siguiendo el esquema de nuestro DataContext (LINQ to SQL) o Model (LINQ to EF).

Partiendo de la base de que disponemos de un modelo o un contexto de datos como el siguiente:

Northwind_products_datacontext

Y deseamos obtener el resultado siguiente (observar que las columnas ‘Category’ y ‘Supplier’ muestran valores de las tablas relacionadas):

northwind_products_form

Pues es tan sencillo (*) como establecer la propiedad FieldName de la columna, escribiendo el nombre del campo completo incluyendo los nombres de los objetos relacionados (en nuestro caso Category.CategoryName y Supplier.CompanyName). Nota: Es posible extender esto encadenando las clases de nuestro modelo (yo por lo menos he llegado a encadenar hasta 4 tablas).

Y lo que más me gusta de esta solución respecto a las otras es que permite incluso el filtrado de los resultados, algo que cuando hacemos interceptando el evento ‘CustomColumnDisplayText’ no es posible.

northwind_products_filtered

En fin, si alguien no conocía este tip y usa este control, espero que le sea útil…

Saludos desde Andorra,

L

Nota: Olvidé mencionar que esta solución es idela para aquellos formularios de consulta, no en modo de entrada de datos (entonces usaríamos un LookUpEdit).

(*) Supongo que es necesario que esté activada la carga diferida, algo que en LINQ to SQL es así de forma predeterminada, aunque no en EF.

** crossposting desde el blog de Lluís Franco en geeks.ms **

3 thoughts on “Tip: Mostrar objetos relacionados en DevExpress GridControl

Leave a Reply

Your email address will not be published. Required fields are marked *