Public Sub cmbTablas_Click()
Wait 0.1
MostrarTablaEnGridView(cmbTablas.Current.Text)
End
For Each HRsf In HResul.Fields
grdTabla.Columns[columna].Text = HRsf.Name
columna += 1
Next
grdTabla.Rows.Count = HResul.Count 'Le metemos un millón de filas
For columna = 0 To grdTabla.Columns.Count - 1
grdTabla.Columns[columna].Width = -1 ''Asignamos el ancho de columnas que tienen un millón de filas
Next
For Each HRsf In HResul.Fields
grdTabla.Columns[columna].Text = HRsf.Name
columna += 1
Next
For columna = 0 To grdTabla.Columns.Count - 1
grdTabla.Columns[columna].Width = -1
Next
grdTabla.Rows.Count = HResul.Count
For Each HRsf In HResul.Fields
grdTabla.Columns[columna].Text = HRsf.Name
grdTabla.Columns[columna].Expand = True
columna += 1
Next
grdTabla.Rows.Count = HResul.Count
(16-03-2025, 20:37)Shordi escribió: Estoy planeando hacer un vídeo con tu programita para ilustrar la aceleración de los gridviews. ¿Me das permiso para adjuntar tu código al vídeo?
With grdTabla
.Columns.Count = HResul.Fields.Count
.Header = .Both
.Mode = Select.Single
'.AutoResize = True
End With
For Each HRsf In HResul.Fields
grdTabla.Columns[columna].Text = HRsf.Name
'grdTabla.Columns[Columna].Expand = True
grdTabla.Columns[columna].Width = -1
columna += 1
Next
Cita:Devuelve o establece si una columna de GridView se expande automáticamente para ajustarse al ancho de GridView.
Si la propiedad AutoResize de GridView no está establecida, esta propiedad no tiene efecto, ya que no se produce un ajuste de tamaño automático.
Solo se produce un ajuste de tamaño explícito. Si AutoResize está establecido, entonces:
Si ninguna columna visible tiene la propiedad Expandir establecida, la última columna se expande como si la tuviera establecida. De lo contrario, la diferencia entre el ancho visible y el ancho de las columnas estáticas (sin Expandir establecido) se comparte entre las columnas expandidas.
Si una columna con Expandir establecido tiene un ancho explícito, este ancho explícito se convierte en su ancho mínimo y se tiene en cuenta al compartir el espacio restante.
Cita:Devuelve o establece el ancho de la columna. El ancho máximo es 1024. Si establece un ancho negativo, la columna se ajustará automáticamente para ajustarse a su contenido. Solo se tienen en cuenta las primeras mil líneas para calcular el ancho ideal.
Public Sub MostrarEnGrid(lista As Collection)
Dim elemento As String
Dim fila As Integer
Dim f As New Font
f.Name = "Sans"
f.Size = 10
For Each elemento In lista
grdEstadistica.Rows.Count = fila + 1
If grdEstadistica.Columns[0].Width < f.TextWidth(lista.Key) Then grdEstadistica.Columns[0].Width = f.TextWidth(lista.key)
grdEstadistica[fila, 0].Text = lista.Key
grdEstadistica[fila, 1].Text = lista[lista.Key]
fila += 1
Next
End
Public Sub grdTabla_Data(Row As Integer, Column As Integer)
Dim fuente As New Font
With fuente
.Name = "NotoSans"
.Size = 10
End With
HResul.MoveTo(Row)
grdTabla.Data.Text = HResul[grdTabla.Columns[Column].Text]
If grdTabla.Columns[Column].Width < fuente.TextWidth(grdTabla.Data.text) Then
grdTabla.Columns[Column].Width = fuente.TextWidth(grdTabla.Data.text)
Endif
End
Public Sub grdTabla_Data(Row As Integer, Column As Integer)
HResul.MoveTo(Row)
grdTabla.Data.Text = HResul[grdTabla.Columns[Column].Text]
'Si el ancho del texto es mayor que al ancho de la columna
If grdTabla.Font.TextWidth(grdTabla.Data.Text) > grdTabla.Columns[column].Width Then
'Ajusta el ancho de la columna al ancho del texto con un pequeño margen de un caracter
grdTabla.Columns[column].Width = grdTabla.Font.TextWidth(grdTabla.Data.Text) + grdTabla.Font.TextWidth(" ")
Endif
End
Cita:Tenía una cabeza tan grande que si fuera un gato tendría que tirar los ratones de debajo de la cama con una ceja
(17-03-2025, 10:54)Shordi escribió: No hace falta liarse tanto, simplemente activa la propiedad WordWrap del gridview a True y se comportará como las tablas de HTML, es decir, ampliará el alto de la fila para que quepa el contenido cuando sea necesario. Más simple y elegante...
Saludos
Public Sub grid_Data(row As Integer, col As Integer)
If $source.count = 0 Then Return
Try Me[row, col].RichText = $source[row][col]
Me[row, col].WordWrap = $wordWrap
If $wordWrap Then Me.Rows[row].Height = Max(Me.Rows[row].Height, Me[row, col].Font.RichTextHeight(Me[row, col].RichText, Me.Columns[col].width) + (Me.Rows.Height - Me.Font.Height))
If $alternate Then Me[row, col].Background = IIf(Row Mod 2 = 0, Color.TextBackground, Color.Background)
End
Public Sub grwPral_ColumnResize(Column As Integer)
Dim i As Integer
For i = 0 To grwPral.Rows.Max
grwPral.Rows[i].Height = -1
Next
End
Public Sub MostrarTablaEnGridView(nomtabla As String)
Dim HRsf As ResultField
Dim columna As Integer
HResul = ModGestBase.MostrarTabla(nomtabla)
With grdTabla
.Columns.Count = HResul.Fields.Count
.Header = .Both
.Mode = Select.Single
End With
For Each HRsf In HResul.Fields
grdTabla.Columns[columna].Text = HRsf.Name
grdTabla.Columns[columna].Expand = True 'Por supuesto, si no el ancho es fijo '
columna += 1
Next
grdTabla.Rows.Count = HResul.Count
End
Public Sub grdTabla_Data(Row As Integer, Column As Integer)
HResul.MoveTo(Row)
grdTabla.Data.WordWrap = True
grdTabla.Data.RichText = HResul[grdTabla.Columns[Column].Text] 'Tenemos que trabajar con Richtext para calcular el alto.'
grdTabla.Rows[row].Height = Max(grdTabla.Rows[row].Height, grdTabla.Data.Font.RichTextHeight(grdTabla.Data.richText, grdTabla.Columns[column].width) + (grdTabla.Rows.Height - grdTabla.Font.Height + 4))
End