Lluís Franco on Geeks.ms
  • Home

Tip: Mostrar objetos relacionados en DevExpress GridControl

  • By lfranco
  • Ene-23-2009
  • Sin categoría
  • 4 Comments.

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.

Comments

4 Responsesso far

  1. anonymous dice:
    23 enero, 2009 a las 2:27 pm

    ¿Y con el control lookupedit?

    Da la misma funcionalidad de la que hablas y más flexibilidad, me parece.

    Un saludo, J.

    Responder
  2. lfranco dice:
    23 enero, 2009 a las 3:03 pm

    🙂

    Hola ‘J’, el control LookupEdit es muy potente, pero su desventaja es que debes asignarle un origen de datos basado en la(s) otra(s) tabla(s) relacionada(s).

    Si esta tabla contiene un número muy elevado de registros eso penaliza en el rendimiento. Usando la solución que propongo es mucho más rápido ya que sólo estás cargando los datos ‘estrictamente necesarios’.

    Por cierto, he olvidado comentar en el post que esta solución es para formularios de consulta, no de entrada de datos (entonces no queda más remedio que usar un LookUpEdit). Voy a actualizar el post.

    Un saludo!

    Responder
  3. anonymous dice:
    10 marzo, 2010 a las 12:43 pm

    Intento seguir tu ejemplo para eso mismo pero no me sale. ¿Puedes subir para que nos descarguemos un ejemplo?, aunque sea muy simple. superpacum@hotmail.com

    Responder
  4. Darling Chavez dice:
    25 marzo, 2016 a las 3:27 am

    Si pero neso es con DevExpress 12 qu7e pasa con la version 13 o 15

    Responder

Deja un comentario Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

← Previous Post Next Post →

Tags

async Back best practices

Entradas recientes

  • Video de mi charla en la #dotNetSpain2016
  • I’m back. Miss me?
  • Office365 actualizado a 2013 para nuevas suscripciones
  • Serializar listas genéricas en aplicaciones WinRT
  • [TPL] Problemas de concurrencia

Comentarios recientes

  • Darling Chavez en Tip: Mostrar objetos relacionados en DevExpress GridControl
  • Alexander en [TPL] Problemas de concurrencia
  • cristinakity en Funciones escalares en TSQL, JOINS, CROSS APPLY, y la madre que parió al topo.
  • cristinakity en Funciones escalares en TSQL, JOINS, CROSS APPLY, y la madre que parió al topo.
  • anonymous en HowTo: Crear una pantalla de inicio (splash screen)

Archivos

  • marzo 2016
  • marzo 2013
  • octubre 2012
  • septiembre 2012
  • agosto 2012
  • febrero 2012
  • diciembre 2011
  • noviembre 2011
  • octubre 2011
  • septiembre 2011
  • agosto 2011
  • junio 2011
  • mayo 2011
  • abril 2011
  • febrero 2011
  • enero 2011
  • diciembre 2010
  • noviembre 2010
  • octubre 2010
  • agosto 2010
  • julio 2010
  • marzo 2010
  • febrero 2010
  • enero 2010
  • diciembre 2009
  • noviembre 2009
  • octubre 2009
  • septiembre 2009
  • agosto 2009
  • julio 2009
  • junio 2009
  • mayo 2009
  • abril 2009
  • marzo 2009
  • febrero 2009
  • enero 2009
  • diciembre 2008
  • noviembre 2008
  • octubre 2008
  • septiembre 2008
  • agosto 2008
  • julio 2008
  • junio 2008
  • mayo 2008
  • abril 2008
  • marzo 2008
  • febrero 2008
  • enero 2008
  • diciembre 2007
  • noviembre 2007
  • octubre 2007
  • septiembre 2007
  • agosto 2007
  • abril 2007
  • febrero 2007
  • enero 2007

Categorías

  • .NET
  • C#
  • Channel9
  • Evento
  • Personal
  • Videos

Meta

  • Acceder
  • RSS de las entradas
  • RSS de los comentarios
  • WordPress.org
About This Site

A cras tincidunt, ut tellus et. Gravida scel ipsum sed iaculis, nunc non nam. Placerat sed phase llus, purus purus elit.

Archives Widget
  • January 2010
  • December 2009
  • November 2009
  • October 2009
Categories
  • Entertainment
  • Technology
  • Sports & Recreation
  • Jobs & Lifestyle
Search
  • facebook
  • twitter
  • rss

Powered by WordPress  |  Business Directory by InkThemes.

This site uses cookies: Find out more.