Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

[TUTORIAL] Popular GridView con Records de una DB
#1

Hola a tod@s,

Tal vez muchos ya sepan sobre este pedacito de código a continuación. A mi me tomó bastante tiempo aprender a utilizarlo bien y aquí lo posteo para cualquiera que vaya comenzando su camino y quiera aprender un poco más a usar este control tan útil.
El código sirve para popular un GridView (llamado "gridIzq") con los resultados de un query desde una base de datos. El Gridview muestra los encabezados con los nombres de cada campo del recordset. 
GAMBAS
  1. Try rsRecords = Connection.Exec(sQuery)
  2.     gridIzq.header = GridView.Horizontal
  3.     gridIzq.grid = True
  4.     gridIzq.Rows.count = 0
  5.     gridIzq.Columns.count = rsRecords.Fields.Count
  6.     
  7.     For iInc = 0 To rsRecords.Fields.Count - 1
  8.       iJnc = 1
  9.       Do While Mid(rsRecords.Fields[iInc].Name, iJnc, 1) <> "." 'En MySQL el formato es nombreTabla.nombreCampo, así recuperamos el nombre de campo solamente para el Título de la columna
  10.         iJnc += 1
  11.       Loop
  12.       gridIzq.Columns[iInc].Text = Right(rsRecords.Fields[iInc].Name, Len(rsRecords.Fields[iInc].Name) - iJnc)
  13.       gridIzq.Columns[iInc].Width = 10 * Len(Right(rsRecords.Fields[iInc].Name, Len(rsRecords.Fields[iInc].Name) - iJnc))
  14.     Next
  15.     
  16.     gridIzq.Rows.Count = rsRecords.Count



y no olvidarse de agregar el siguiente código al evento _Data del GridView:

GAMBAS
  1. Public Sub gridIzq_Data(Row As Integer, Column As Integer)
  2.   If (rsRecords <> Null) Then
  3.     If Row >= 0 Then
  4.       rsRecords.moveTo(Row)
  5.       Try gridIzq.Data.Text = Str(rsRecords[Column])
  6.     Endif



Espero esto ayude a alguien. 
Saluditos, 
Yo.

Dies ist kein Unterschrift, sondern...
[Imagen: https://www.aloscuantosbesos.com/images/tadaalinux.jpg]
 
[-] Los siguientes 3 usuarios dicen gracias a crevilla por este post:
  • Grandamakulo, Shordi, tincho
    ¡Gracias!
#2

Si estás interesado en el tema de los GridView, tal vez te interese echar un ojo a esta serie de vídeos:

Serie Extendiendo Gridview

Saludos

No podemos regresar
[-] Los siguientes 2 usuarios dicen gracias a Shordi por este post:
  • crevilla, Grandamakulo
    ¡Gracias!
#3

Gracias @crevilla pero solo un consejo si usas "En MySQL el formato es nombreTabla.nombreCampo, así recuperamos..." este formato para nombrar internamente cada campo de la base de datos se te va hacer interminable hacer expresiones SQL, existen formatos estandarizados mucho mejor.

Tengo algunas preguntas pero tengo algo de prisa y te las haré en cuanto pueda.

Saludos.
    ¡Gracias!
#4

@crevilla y a todo el que pueda interesarle.

Te recomiendo la lectura del siguiente post para insertar código gambas correctamente con la sintaxis resaltada:

https://gambas-es.org/showthread.php?tid=20

En la medida de lo posible os ruego que intentéis usarlo para mejor legibilidad del código.

Gracias y saludos

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
[-] Los siguientes 1 usuarios dice gracias a jguardon por este post:
  • Grandamakulo
    ¡Gracias!
#5

(01-04-2022, 07:09)crevilla escribió:  ...aquí lo posteo para cualquiera...

Gracias por compartir el código.
Yo suelo usar algo parecido a lo que planteas pero le agrego una colección en la que están los nombres de los campos y los de las tablas lo que me permite luego poner los nombres de los campos en varios idiomas usando las herramientas de traducción de gambas. No es necesario pero hace que el programa tenga un mejor aspecto y permite la adaptación por parte del usuario.
Si en la base existe un campo donde se pone el nombre de un producto pero el campo se llama "prod" en el gridview puede aparecer "Producto" como titulo del campo.
Ejemplo de la lista de nombres, que se permite luego traducir los nombres de los campos y las tablas sin tener que tocar nada de la base de datos.
GAMBAS
  1.  
  2.  
  3.   cTmp.Add(("Shareholders"), "shareholders")
  4.   cTmp.Add("Id", "shareholders.idx")
  5.   cTmp.Add(("Name"), "shareholders.name")
  6.   cTmp.Add(("Phone"), "shareholders.phone")
  7.   cTmp.Add(("Email"), "shareholders.email")
  8.   cTmp.Add(("Employees"), "employees")
  9.   cTmp.Add("Id", "employees.idx")
  10.   cTmp.Add(("Name"), "employees.name")
  11.   cTmp.Add(("Phone"), "employees.phone")
  12. '...



El evento data uso la lista aFields que tiene os nombres de los campos en el mismo orden que en el result.
GAMBAS
  1. Public Sub GridViewExisting_Data(Row As Integer, Column As Integer)
  2.   If resShow.Available Then
  3.     resShow.MoveTo(Row)
  4.     GridViewExisting[Row, Column].Text = resShow[aFields[Column]]



1 Saludo.
    ¡Gracias!


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)