Comunidad Gambas-es
Borrar contenido de GridView - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: General (https://gambas-es.org/forum-4.html)
+--- Tema: Borrar contenido de GridView (/thread-19.html)



Borrar contenido de GridView - calcena - 26-07-2020

Buenas compañeros, una consulta, tengo unos desarrollos en los cuales para armar el contenido de un gridview paso el objeto por referencia para que en una función o método se construya y se rellene.
Bien este objeto lo primero que debe hacerse es formatearse para quedarse en blanco, bien pues para esto siempre tengo que acudir a la ayuda de una función que me hace una iteración dentro del control por las filas y columnas borrando el contenido.
No existe otra forma más ágil dentro del propio control que realice este formateo, he probado con .Clear pero esto me elimina el contenido pero NO me elimina las celdas que quedan vacías y se siguen acumulando hasta el infinito.
Código:
Public Function getErrores(ByRef objGridView As GridView) As GridView
 
  Dim iRow As Integer = 0
 
  rstResult = getResult()

  borrarGridView
 
  objGridView.Columns.Count = rstResult.Fields.Count
 
  objGridView.Rows.Height = 35
  objGridView.Header = rstResult.Fields.Count
 
  objGridView.Columns[0].Title = "Id"
  objGridView.Columns[0].Width = 0
  objGridView.Columns[0].Resizable = False
  objGridView.Rows[0].TextAlignment = 3
 
  objGridView.Columns[1].Title = "Estado"
  objGridView.Columns[1].Width = 42
  objGridView.Columns[1].Resizable = False
  objGridView.Rows[1].TextAlignment = 3
 
  objGridView.Columns[2].Title = "Fecha"
  objGridView.Columns[2].Width = 80
  objGridView.Columns[2].Resizable = False
  objGridView.Rows[2].TextAlignment = 3
 
  objGridView.Columns[3].Title = "Usuario"
  objGridView.Columns[3].Width = 80
  objGridView.Columns[3].Resizable = False
  objGridView.Rows[3].TextAlignment = 3
 
  objGridView.Columns[4].Title = "Formulario"
  objGridView.Columns[4].Width = 80
  objGridView.Columns[4].Resizable = False
  objGridView.Rows[4].TextAlignment = 3
 
  objGridView.Columns[5].Title = "Mensaje"
  objGridView.Columns[5].Width = 150
  objGridView.Columns[5].Resizable = False
  objGridView.Rows[5].TextAlignment = 3
 
  objGridView.Header = 3
  objGridView.Header = GridView.Horizontal
 
  rstResult.MoveFirst
 
  Do While rstResult.Available
    objGridView.Rows.Insert(iRow, 1)
    objGridView[iRow, 0].Text = rstResult!Id
    objGridView[iRow, 1].Text = rstResult!Estado
    objGridView[iRow, 2].Text = rstResult!FechaMod
    objGridView[iRow, 3].Text = rstResult!Usuario
    objGridView[iRow, 4].Text = rstResult!Formulario
    objGridView[iRow, 5].Text = rstResult!Mensaje
    
    iRow += 1
    rstResult.MoveNext
  Loop
 
  Return objGridView
 
End
Código:
Public Sub borrarGridView(ByRef objGridView As GridView)
 
  Dim x As Integer
 
  For x = objGridView.Rows.Count - 1 To Step -1
    objGridView.Rows.Remove(x, 1)
  Next
 
End

Se aceptan sugerencias de optimización y agilidad del proceso.

Saludos y gracias.


RE: Borrar contenido de GridView - gambafeliz - 26-07-2020

Perdón si te suela como tontería.

1. Y si destruyes el objeto GridView y lo creas nuevamente
2. o rows.count = 0

Pero creo que en el punto 2 debes poner GridView.Clear en su definición del GridView de nuevo. Algo como en vez de tu sub borrarGridView pues un sub para definirGridView cada vez que deseas borrarlo y cargarlo nuevamente.

Bueno espero que sirva de algo.


RE: Borrar contenido de GridView - vuott - 26-07-2020

calcena, tengo una curiosidad: porqué usaste ByRef ?


RE: Borrar contenido de GridView - cogier - 26-07-2020

Considere este código para limpiar y reconstruir la GridView

Código:
Public Sub Build()

  Dim sTitle As String[] = ["ID", "Estado", "Fecha", "Usuario", "Mensaje"]
  Dim iLoop As Integer

  With objGridView
    .Clear
    .Rows.Count = 0
    .Columns.Count = sTitle.Count
    .Header = GridView.Both
  End With

  For iLoop = 0 To sTitle.Max
    objGridView.Columns[iloop].Title = sTitle[iLoop]
    objGridView.Columns[iLoop].Resizable = False
    objGridView.Rows[iLoop].TextAlignment = 3
  Next

End

Ahora agregue sus datos y termine con: -

objGridView.Columns.Width = -1

Esto ajustará automáticamente el ancho de las columnas


RE: Borrar contenido de GridView - calcena - 26-07-2020

(26-07-2020, 17:31)vuott escribió: calcena, tengo una curiosidad: porqué usaste ByRef ?


Buenas, para poder pasar el objeto por referencia.

Para que el objeto se devuelva con sus valores.

Saludos

(26-07-2020, 17:41)cogier escribió: Considere este código para limpiar y reconstruir la GridView

Código:
Public Sub Build()

  Dim sTitle As String[] = ["ID", "Estado", "Fecha", "Usuario", "Mensaje"]
  Dim iLoop As Integer

  With objGridView
    .Clear
    .Rows.Count = 0
    .Columns.Count = sTitle.Count
    .Header = GridView.Both
  End With

  For iLoop = 0 To sTitle.Max
    objGridView.Columns[iloop].Title = sTitle[iLoop]
    objGridView.Columns[iLoop].Resizable = False
    objGridView.Rows[iLoop].TextAlignment = 3
  Next

End

Ahora agregue sus datos y termine con: -

objGridView.Columns.Width = -1

Esto ajustará automáticamente el ancho de las columnas

Perfecto!! funciona de mararvilla, solo había probado con clear y con destroy etc ....

Gracias


RE: Borrar contenido de GridView - vuott - 26-07-2020

Si usas ByRef no necesita el Return en la función 'getErrores'.
Es decir:
[code]

...y más, siendo el identificador 'objGridView' un Puntero al Objeto del tipo 'GridView', para pasarlo por Dirección a la función, tampoco es necesaria la palabra ByRef.


RE: Borrar contenido de GridView - calcena - 27-07-2020

(26-07-2020, 23:41)vuott escribió: Si usas ByRef no necesita el Return en la función 'getErrores'.
Es decir:
[code]

...y más, siendo el identificador 'objGridView' un Puntero al Objeto del tipo 'GridView', para pasarlo por Dirección a la función, tampoco es necesaria la palabra ByRef.

Ok Vuott el tema Return y definir una función ha sido un error de copiar internamente en mi código, lo que pensaba es que el byref era necesario para saber cuando es un objeto de referencia (se modifica el resultado del que pasamos y lo devolvemos como objeto modificado) a cuando es por valor ( se pasa siempre uno nuevo y se modifica)

modificaré lo que comentas, gracias.

Saludos.