crevilla   01-04-2022, 07:09
#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. 
Código:
Try rsRecords = Connection.Exec(sQuery)
    gridIzq.header = GridView.Horizontal
    gridIzq.grid = True
    gridIzq.Rows.count = 0
    gridIzq.Columns.count = rsRecords.Fields.Count
    
    For iInc = 0 To rsRecords.Fields.Count - 1
      iJnc = 1
      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
        iJnc += 1
      Loop
      gridIzq.Columns[iInc].Text = Right(rsRecords.Fields[iInc].Name, Len(rsRecords.Fields[iInc].Name) - iJnc)
      gridIzq.Columns[iInc].Width = 10 * Len(Right(rsRecords.Fields[iInc].Name, Len(rsRecords.Fields[iInc].Name) - iJnc))
    Next
    
    gridIzq.Rows.Count = rsRecords.Count

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

Código:
Public Sub gridIzq_Data(Row As Integer, Column As Integer)
  If (rsRecords <> Null) Then
    If Row >= 0 Then
      rsRecords.moveTo(Row)
      Try gridIzq.Data.Text = Str(rsRecords[Column])
    Endif
  Endif
Catch
Print Error.Text
End

Espero esto ayude a alguien. 
Saluditos, 
Yo.

Dies ist kein Unterschrift, sondern...
[Imagen: https://www.aloscuantosbesos.com/images/tadaalinux.jpg]
 
Shordi   01-04-2022, 10:34
#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
gambafeliz   02-04-2022, 11:42
#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.
Última modificación: 02-04-2022, 18:40 por gambafeliz.
jguardon   02-04-2022, 18:28
#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'
tincho   03-04-2022, 00:39
#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.
Código:
Private Function Rosetta() As Collection

  Dim cTmp As New Collection

  cTmp.Add(("Shareholders"), "shareholders")
  cTmp.Add("Id", "shareholders.idx")
  cTmp.Add(("Name"), "shareholders.name")
  cTmp.Add(("Phone"), "shareholders.phone")
  cTmp.Add(("Email"), "shareholders.email")
  cTmp.Add(("Employees"), "employees")
  cTmp.Add("Id", "employees.idx")
  cTmp.Add(("Name"), "employees.name")
  cTmp.Add(("Phone"), "employees.phone")
'...

El evento data uso la lista aFields que tiene os nombres de los campos en el mismo orden que en el result.
Código:
Public Sub GridViewExisting_Data(Row As Integer, Column As Integer)
  If resShow.Available Then
    resShow.MoveTo(Row)
    GridViewExisting[Row, Column].Text = resShow[aFields[Column]]
  Endif
End

1 Saludo.
  
Usuarios navegando en este tema: 3 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.