none
Entity Framework - GridView Binding RRS feed

  • Pregunta

  • Quiero presentar un datagridview con información de un conjunto de entidades que resultan de una consuta a base de datos, y el data grid no muestra la información relacionada.

    La estructura es Clientes->Contactos->Departamentos. Lo que hago es cargar un cliente, y en la carga indicar que se carguen también los datos relacionados de contactosy departamentos de contactos, de forma que tengo todo en memoria cuando hago el enlace con el grid view.

    Lo que ocurre es que no es posible decir al grid que muestre todos los contactos, junto con la descripción del departamento correspondiente (que tiene en memoria pero no es un campo própio del contacto sino que está relacionado a través de un campo IDDEPARTAMENTO)

    ¿puede el datagridview mostrar información relacionada a partir de un modelo de entity Framework?

    martes, 7 de julio de 2009 18:47

Todas las respuestas

  • Hola RaulXXI

    Cuando dices: 
     "puede el datagridview mostrar información relacionada??"

    OPCION 1) Quieres decir que te despliege como una jerarquia? o sea Clientes y luego Contactos.. parecido a un Treeview?
    OPCION 2) O quiers decir que en una misma fila del gridview tener posibilidad de escribir los datos de un Contacto del Cliente?

    Si es la opcion 1, no se puede directamente PERO se lo puede armar. Seria un "Gridview into Gridview", "Nested Gridview"
    La opcion 2... pero si tienes varios contactos? o varios departamentos? como lo quieres mostrar/visualizar?

    Coloca el resultado que quieres lograr y te podremos ayudar mejor o pensar entre todos las alternativas... :)


    Jose. A Fernandez | blog: http://geeks.ms/blogs/fernandezja
    • Propuesto como respuesta Felipe Sotelo S miércoles, 6 de octubre de 2010 13:37
    miércoles, 29 de julio de 2009 0:58
  • Tienes que usar Eager Loading un ejemplo de hacer esto con LINQ es:

    Dim vContactos as new List(of Contacto)
    
    vContactos = From c In Contexto.Contacto.Include("Departamento") select c
    
    '- Dentro de la entidad vContacto ya puedes acceder a: -
    'vContacto(0).Departamento.IdDepartamento
    
    grvListado.DataSource = vContactos.ToList()

    Saludos

    Colabora con la comunidad,marca si la respuesta es la correcta, Gracias!. guisbert@blogspot.com
    • Propuesto como respuesta Felipe Sotelo S miércoles, 6 de octubre de 2010 13:38
    martes, 18 de agosto de 2009 19:02
  • Yo tengo el mismo problema que RaulXXI, lo que tengo es una entidad Cliente que engloba una colección de Mensajes, y los Mensajes a su vez tiene una Reference a otra entidad Clinico, es decir: Clinico tiene una relación 1:N con Mensajes y Cliente lo mismo. Bien, yo hago lo siguiente:

    GridView.DataSource=cliente.Mensajes;

    Mensajes tiene campos como fecha, texto, etc., que no tengo problema para mostrarlos en el GridView, pero lo que quiero es que en cada fila de los Mensajes del Cliente, me aparezca el login del Clinico que se lo mandó, es decir:

    IdMensaje | Fecha | Clinico | Texto

    Yo hago el Load() para los mensajes del cliente, pero como puedo hacer para que me muestre el Clínico, ya que no puedo acceder a su login, a menos que haga Mensaje.Clinico.login, cosa que ya he probado y nada, no sé como enlazarlo al GridView. He probado a cargar las referencias de los mensajes a los Clinicos con un bucle foreach, pero me suelta la excepción: "La instancia de ObjectContext se ha eliminado y ya no se puede usar para operaciones que requieren una conexión". A que puede ser debido? Alguien me podría echar un cable? Muchas gracias de antemano.
                   
    lunes, 24 de agosto de 2009 10:44
  • Disculpa, pudiste solucionar este problema?

    Saludos


    G
    jueves, 17 de junio de 2010 18:59
  • La verdad es que es bastante simple de solucionar, para usar desde un servicio no tiene mucho sentido tener habilitado lazy loading a menos que quieras controlar exactamente lo que vas a cargar, pero si como dicen quieren acceder a las propiedades de navegación de las entidades sin tener que preocuparse por la carga individual, lo más simple es desactivarla, puedes hacerlo desde el contexto (ObjectContext) o, si tienes el modelo edmx, lo haces desde el diseñador, seteando la propiedad: "Carga diferida habilitada" en false y listo, problema solucionado, ahora por defecto va a cargar siempre las entidades relacionadas.
    martes, 21 de septiembre de 2010 4:10
  • Muy bueno, no conocía a la función Include.

     

    Saludos.

    jueves, 19 de mayo de 2011 19:34
  • Creo que todavía no esta contestada la pregunta, una vez utilizada la opción de include para traerte los datos de una tabla vinculada, como visualizar esa columna en un datagrid, cual seria la propiedad 'DataPropertyName' del datagrid.?
    sábado, 6 de agosto de 2011 18:56