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.

Borrar este aviso
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

Borrar contenido de GridView
#1

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.
GAMBAS
  1. Public Function getErrores(ByRef objGridView As GridView) As GridView
  2.  
  3.   Dim iRow As Integer = 0
  4.  
  5.   rstResult = getResult()
  6.  
  7.   borrarGridView
  8.  
  9.   objGridView.Columns.Count = rstResult.Fields.Count
  10.  
  11.   objGridView.Rows.Height = 35
  12.   objGridView.Header = rstResult.Fields.Count
  13.  
  14.   objGridView.Columns[0].Title = "Id"
  15.   objGridView.Columns[0].Width = 0
  16.   objGridView.Columns[0].Resizable = False
  17.   objGridView.Rows[0].TextAlignment = 3
  18.  
  19.   objGridView.Columns[1].Title = "Estado"
  20.   objGridView.Columns[1].Width = 42
  21.   objGridView.Columns[1].Resizable = False
  22.   objGridView.Rows[1].TextAlignment = 3
  23.  
  24.   objGridView.Columns[2].Title = "Fecha"
  25.   objGridView.Columns[2].Width = 80
  26.   objGridView.Columns[2].Resizable = False
  27.   objGridView.Rows[2].TextAlignment = 3
  28.  
  29.   objGridView.Columns[3].Title = "Usuario"
  30.   objGridView.Columns[3].Width = 80
  31.   objGridView.Columns[3].Resizable = False
  32.   objGridView.Rows[3].TextAlignment = 3
  33.  
  34.   objGridView.Columns[4].Title = "Formulario"
  35.   objGridView.Columns[4].Width = 80
  36.   objGridView.Columns[4].Resizable = False
  37.   objGridView.Rows[4].TextAlignment = 3
  38.  
  39.   objGridView.Columns[5].Title = "Mensaje"
  40.   objGridView.Columns[5].Width = 150
  41.   objGridView.Columns[5].Resizable = False
  42.   objGridView.Rows[5].TextAlignment = 3
  43.  
  44.   objGridView.Header = 3
  45.   objGridView.Header = GridView.Horizontal
  46.  
  47.   rstResult.MoveFirst
  48.  
  49.   Do While rstResult.Available
  50.     objGridView.Rows.Insert(iRow, 1)
  51.     objGridView[iRow, 0].Text = rstResult!Id
  52.     objGridView[iRow, 1].Text = rstResult!Estado
  53.     objGridView[iRow, 2].Text = rstResult!FechaMod
  54.     objGridView[iRow, 3].Text = rstResult!Usuario
  55.     objGridView[iRow, 4].Text = rstResult!Formulario
  56.     objGridView[iRow, 5].Text = rstResult!Mensaje
  57.     
  58.     iRow += 1
  59.     rstResult.MoveNext
  60.   Loop
  61.  
  62.   Return objGridView
  63.  


GAMBAS
  1. Public Sub borrarGridView(ByRef objGridView As GridView)
  2.  
  3.  
  4.   For x = objGridView.Rows.Count - 1 To Step -1
  5.     objGridView.Rows.Remove(x, 1)
  6.   Next
  7.  



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

Saludos y gracias.
Responder
#2

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.
Responder
#3

calcena, tengo una curiosidad: porqué usaste ByRef ?
Responder
#4

Considere este código para limpiar y reconstruir la GridView

GAMBAS
  1. Public Sub Build()
  2.  
  3.   Dim sTitle As String[] = ["ID", "Estado", "Fecha", "Usuario", "Mensaje"]
  4.   Dim iLoop As Integer
  5.  
  6.   With objGridView
  7.     .Clear
  8.     .Rows.Count = 0
  9.     .Columns.Count = sTitle.Count
  10.     .Header = GridView.Both
  11.  
  12.   For iLoop = 0 To sTitle.Max
  13.     objGridView.Columns[iloop].Title = sTitle[iLoop]
  14.     objGridView.Columns[iLoop].Resizable = False
  15.     objGridView.Rows[iLoop].TextAlignment = 3
  16.   Next
  17.  



Ahora agregue sus datos y termine con: -

objGridView.Columns.Width = -1

Esto ajustará automáticamente el ancho de las columnas
Responder
#5

(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

GAMBAS
  1. Public Sub Build()
  2.  
  3.   Dim sTitle As String[] = ["ID", "Estado", "Fecha", "Usuario", "Mensaje"]
  4.   Dim iLoop As Integer
  5.  
  6.   With objGridView
  7.     .Clear
  8.     .Rows.Count = 0
  9.     .Columns.Count = sTitle.Count
  10.     .Header = GridView.Both
  11.  
  12.   For iLoop = 0 To sTitle.Max
  13.     objGridView.Columns[iloop].Title = sTitle[iLoop]
  14.     objGridView.Columns[iLoop].Resizable = False
  15.     objGridView.Rows[iLoop].TextAlignment = 3
  16.   Next
  17.  



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
Responder
#6

Si usas ByRef no necesita el Return en la función 'getErrores'.
Es decir:
GAMBAS
  1. Public Function getErrores(ByRef objGridView As GridView)



...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.
Responder
#7

(26-07-2020, 23:41)vuott escribió:  Si usas ByRef no necesita el Return en la función 'getErrores'.
Es decir:
GAMBAS
  1. Public Function getErrores(ByRef objGridView As GridView)



...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.
Responder


Salto de foro:


Usuarios navegando en este tema: 2 invitado(s)