Evento Data, Colorear Celdas Y Ver Texto


Ir a la página 1, 2  Siguiente

Objetivo: Evento Data, Colorear Celdas Y Ver Texto
Hola!.

¿ Es imposible dar color a las celdas y poder ver el texto cuando se produce el evento data del GridView ?.

La impresión que produce es: Dibuja los colores de las filas, alternadamente por ejemplo.
Al mover la barra de desplazamiento vertical, se ve el texto, pero rápidamente los colores se actualizan en las celdas y no dejar ver el texto

¿ Tiene solución ?.

Saludos

Objetivo: Re: Evento Data, Colorear Celdas Y Ver Texto
¿Cómo lo estás haciendo? Nunca me ha pasado eso que dices, aunque se me ocurre que si se cambia el orden de dibujado podría ocurrir algo así con procesadores/tarjetas gráficas lentas. No sé, es un decir...

Saludos

Perfil MP  
Objetivo: Re: Evento Data, Colorear Celdas Y Ver Texto
Pon el código, a mi no me pasa nada de eso. A ver cómo lo haces.

Perfil MP  
Objetivo: Re: Evento Data, Colorear Celdas Y Ver Texto
Jesús:

No, por equipo o tarjeta lenta no es. Algo tengo que estar haciendo mal.

Lo que muestro es un archivo de texto que tiene mas de 30k lineas de registros en un gridview.
No estoy muy puesto en el uso del evento Data, para ser la primera vez logré lo que quería hacer, pero tengo el problema de los colores.
No estoy leyendo de un base de datos, es un archivo de texto con un array.

Al principio lo que hacía era que mostraba todas los registros en el gridview, pero aquello era algo lento.
Este es el código de la parte que muestra el contenido con el evento Data.

Como el número de campos que me interesa es menor, eliminé algunas columnas
El número de filas es grande, bastante.

Public Sub Form_Activate()

grdTabla.Rows.Count = numfilas
grdTabla.Columns.Count = numcampos - 2

End

Public Sub grdTabla_Data(Row As Integer, Column As Integer)

Dim camposactuales As String[]
Dim f As New Font

camposactuales = Split(registros[row], "::", "", True)
camposactuales.Remove(0)
camposactuales.Remove(camposactuales.Length - 1)

If grdTabla.Columns[column].Width < f.TextWidth(camposactuales[column]) Then
grdTabla.Columns[column].Width = f.TextWidth(camposactuales[column])
Endif

'No funciona ver las filas con colores y a la vez el texto
If row Mod 2 = 0 Then
grdTabla[row, column].Background = Color.White
Else
grdTabla[row, column].Background = Color.LightBackground
Endif

grdTabla.Data.Text = camposactuales[column]

End


A ver que me aconsejáis. Sobre todo el buen uso del evento Data.
Ya sé que debería usar una base de datos y no un archivo de texto con registros, es cosa de experimentos.

Los componentes en uso son:
- gb
- gb.form
- gb.gui.qt
- gb.image

Saludos

Objetivo: Re: Evento Data, Colorear Celdas Y Ver Texto
No se hace así, generas la fuente de datos en cada ejecución del evento, que es una por cada celda.
Tienes que generar la fuente de datos antes y que el gridview se limite a "sus cosas", es decir a pintar y mostrar.

Te adjunto un ejemplo que te acabo de hacer de cómo se puede hacer de manera sencilla. Leyendo un CSV se pasa a una tabla bidimensional y se muestra en un gridview.
Tienes una variable que puedes usar para mostrar o no el estilo "cebra" (pijama se decía en mis tiempos).
La fila seleccionada se ve en negrita y la celda seleccionada con fondo rojo.

captura_de_pantalla_de_2015_11_27_11_49_16


datafromtext-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: datafromtext-0.0.1.tar.gz
Tamaño: 12.47 KB
Descargado: 88 veces
datafromtext-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: datafromtext-0.0.1.tar.gz
Tamaño: 12.47 KB
Descargado: 88 veces
datafromtext-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: datafromtext-0.0.1.tar.gz
Tamaño: 12.47 KB
Descargado: 88 veces

Perfil MP  
Objetivo: Re: Evento Data, Colorear Celdas Y Ver Texto
En efecto, el texto en la celda es visible.

Gracias, shordi: ahora hemos comprendido zomp como utilizar al evento _Data de una GridView.

Private s As New String[3, 3]


Public Sub Form_Open()

With GridView1
.Rows.Count = 3
.Columns.Count = 3
End With

s[1, 1] = "shordi"
s[1, 2] = "super"

End


Public Sub GridView1_Data(Row As Integer, Column As Integer)

If (Row = 1) And (Column = 1) Then GridView1.Data.Background = Color.SetAlpha(&FF0000, 240)
If (Row = 1) And (Column = 2) Then GridView1.Data.Background = Color.SetAlpha(&FFFF00, 240)

GridView1.Data.Text = s[Row, Column]

End

última edición por vuott el Viernes, 27 Noviembre 2015, 13:13; editado 2 veces
Perfil MP  
Objetivo: Re: Evento Data, Colorear Celdas Y Ver Texto
Shordi:

Me pongo con ello. Muchas gracias. Ya te comento cualquier duda.

Vuott:

¿ Cómo es que no añadiste el emoticon/smile al mensaje ?.
Por cierto,¿ sabías que los emoticonos ya han cumplido mas de 30 años ?!.

Saludos

Objetivo: Re: Evento Data, Colorear Celdas Y Ver Texto
Hice un pequeño cambio y ha funcionado, pero "el reloj" se muestra cuando cambio el tamaño de alguna de las columnas. ( Son muchos registros )
Tengo que probar tu método, Jorge. Creo que es algo más lento.

Lo que he cambiado en el evento Data fue grdTabla[row][colum] por grdTabla.Data.BackGround .
La verdad es que es rápido.

Public Sub grdTabla_Data(Row As Integer, Column As Integer)

Dim camposactuales As String[]
Dim f As New Font

camposactuales = Split(registros[row], "::", "", True)
camposactuales.Remove(0)
camposactuales.Remove(camposactuales.Length - 1)

If grdTabla.Columns[column].Width < f.TextWidth(camposactuales[column]) Then
grdTabla.Columns[column].Width = f.TextWidth(camposactuales[column])
Endif


If row Mod 2 = 0 Then
grdTabla.Data.Background = Color.White
Else
grdTabla.Data.Background = Color.LightBackground
Endif

grdTabla.Data.Text = camposactuales[column]

End


Lo cierto es que se muestra el texto y los colores

muestra

Esta forma de hacerlo lo he visto con una base de datos. Adjunto lo principal.
Public Sub Form_Activate()

'Cambia el contador de filas del gridview de 0 al numero de registros
'Esto maneja el Trigger del evento del manejador Data
GridView1.Rows.Count = $res.Count

End


Public Sub GridView1_Data(Row As Integer, Column As Integer)

$res.MoveTo(Row)
GridView1.Data.Text = Str($res[GridView1.Columns[Column].Text])

End


En el propio evento Data se actualiza que registro quiero ver y me muestra cada campo que voy a mostrar.

Saludos

Objetivo: Re: Evento Data, Colorear Celdas Y Ver Texto
Shordi:

Comprueba si esto no es más rápido.
Claro que son pocos registros. He usado tu csv. No es complicado añadir muchos mas.

Lo que es leer ese archivo de p a pa es muy lento (cuando es grande el csv).
Lleva un tiempo leer un archivo de tantos registros.

Saludos


GridDataChanged.tar.gz
Descripción:  
Descargar
Nombre del archivo: GridDataChanged.tar.gz
Tamaño: 13.6 KB
Descargado: 73 veces
GridDataChanged.tar.gz
Descripción:  
Descargar
Nombre del archivo: GridDataChanged.tar.gz
Tamaño: 13.6 KB
Descargado: 73 veces
GridDataChanged.tar.gz
Descripción:  
Descargar
Nombre del archivo: GridDataChanged.tar.gz
Tamaño: 13.6 KB
Descargado: 73 veces

Objetivo: Re: Evento Data, Colorear Celdas Y Ver Texto
Bueno... es más rápido si insistes en recorrer y reformatear el grid en cada evento Data.
Esto:
Public Sub grdTabla_Data(Row As Integer, Column As Integer)
....
....
If grdTabla.Columns[column].Width < f.TextWidth(camposactuales[column]) Then
grdTabla.Columns[column].Width = f.TextWidth(camposactuales[column])
Endif
....
....

End

En la impresión de cada una de las celdas de cada una de las filas. No tiene mucho sentido porque:
-Si el .csv está controlado (es decir sabes de antemano el ancho aproximado de cada campo) no necesitas tal formateo "en caliente" y puedes preestablecer el ancho de las columna una sola vez fuera del evento Data.
-Si el .csv no está controlado (es decir no sabes de antemano el ancho aproximado de cada campo) en el momento que una columna contenga el primer párrafo del quijote, la has cagado.

Prueba ésto:

En el form activa la propiedad Arrangment a Fill y la propiedad Expand a True
Establece la propiedad Expand del Gridview a True
y luego:

Public Sub Form_Activate()

Dim n As Integer

grdTabla.Rows.Count = numfilas
grdTabla.Columns.Count = numcampos
For n = 0 To numcampos - 1
grdTabla.Columns[n].Expand = True
Next

End

Public Sub grdTabla_Data(Row As Integer, Column As Integer)

Dim camposactuales As String[]
Dim f As New Font

camposactuales = Split(registros[row], ";", "", True)

If row Mod 2 = 0 Then
grdTabla.Data.Background = Color.White
Else
grdTabla.Data.Background = Color.LightBackground
Endif
grdTabla.Data.Text = camposactuales[Column]

End


Verás que las columnas se adaptan al espacio disponible. Puedes también jugar con ellas, si es que sabes qué pueden contener, y dejar fijas algunas (las que contegan cosas como el DNI o el teléfono) y expandidas las otras, (nombre y dirección, por ejemplo) y con ello te quedan unos grid muy agradables.

De todas formas, fuera del laboratorio, no creo que el fichero de texto sea el soporte adecuado para un grid "currado", más bien te vale para decidir si el contenido de ese fichero vale la pena pasarlo o no a una base de datos. Por tanto, tal vez todas las columnas adaptables sean lo mejor en este caso.

Moraleja:
No formatees las Columnas del GridView en el evento data, sólo la celda o, como mucho, la fila.

Saludos

Perfil MP  
Ir a la página 1, 2  Siguiente

Página 1 de 2


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.3284s (PHP: -44% SQL: 144%)
Consultas SQL: 48 - Debug off - GZIP Activado