Buenos días!
Estoy realizando un ejemplo con un GridView que tengo "algunos" nombres de escritores, poetas con su fecha de nacimiento y la de fallecimiento.
Actualmente solo estoy ordenado la columna de las fechas donde hago click.
Pero me encuentro con el problema de que cuando uso el evento Data no me muestra los cambios si "uso" el array que contiene todo los datos.
Solo lo hace la primera vez.
El gridview si lo hace si lo hago directamente, cambiando su contenido en el evento Sort. ( En este caso ).
'Comentar una opción u otra, para ver las diferencias. Ahora mismo usa la modificación del contenido directamente del gridview.
Código fuente:
Código:
' Gambas class file
'Fecha MM/DD/YYYY
Private nombres As String[][] = [
["Federico García Lorca", "06/05/1898", "08/18/1936"],
["Miguel de Unamuno", "09/29/1863", "12/31/1936"],
["Rosalía de Castro", "02/23/1837", "07/15/1885"],
["José Martínez Ruiz", "06/08/1873", "03/02/1967"],
["Pío Baroja y Nessi", "12/28/1872", "10/30/1956"]]
Private titulos As String[] = ["Nombre del autor", "Fecha de nacimiento", "Fecha de fallecimiento"]
Public Sub Form_Open()
With Me
.Arrangement = Arrange.Vertical
.Spacing = True
.Margin = True
.Title = "Ordenar por fechas"
End With
With grd
.Expand = True
.Mode = Select.Single
.Sorted = True
End With
ConfigurarGrid()
End
Public Sub ConfigurarGrid()
With grd
.Font = Font["Noto Sans,False,10"]
.Columns.Count = 3
.Columns[0].Title = titulos[0]
.Columns[0].Expand = True
.Columns[1].Title = titulos[1]
.Columns[1].Expand = True
.Columns[1].Alignment = Align.Center
.Columns[2].Title = titulos[2]
.Columns[2].Expand = True
.Columns[2].Alignment = Align.Center
.Header = grd.Both
.Rows.Count = nombres.Count
End With
End
Public Sub btnSalir_Click()
Me.Close
End
Public Sub grd_Data(Row As Integer, Column As Integer)
'El array nombres se muestra en el grid
grd[Row, Column].Text = nombres[Row][Column]
End
Public Sub grd_Sort()
Dim afechas As New Date[]
Dim asortfechas As New Date[]
Dim avalores As New String[][] 'Contendrá todos los valores del gridview (más adelante)
If grd.Columns.Sort > 0 Then
'Si el contenido de la columna se parece a una fecha
For nx As Integer = 0 To grd.Rows.Max
afechas.Add(CDate(grd[nx, grd.Columns.Sort].Text))
Next
asortfechas = afechas.Copy()
asortfechas.Sort(IIf(grd.Columns.Ascending, gb.Ascent, gb.Descent))
For n As Integer = 0 To asortfechas.Max
'¿ No se supone que estoy actualizando el array ?
'Entonces,¿ por qué no cambia los valores en el gridview en el evento data ?.
'grd.columns.sort, es por la columna que se ordena
'1ª Opción
'Modificar el array nombres.
'nombres[n][grd.Columns.sort] = asortfechas[n]
'2ª Opción. Mostrar directamente en el gridview el contenido del array asortfechas
grd[n, grd.Columns.Sort].Text = asortfechas[n]
Next
Else
'Si el contenido de la columna no se parece a una fecha lo mostramos en la consola por ahora
For n As Integer = 0 To grd.Rows.Max
Print grd[n, grd.Columns.Sort].Text
Next
Print
Endif
'Intento de refrescar el gridview para refrescar su contenido, en caso de usar la 1ª opción
'grd.Refresh()
End
Y el código. Todavía tengo que mostrarlo todo junto, pero por ahora prefiero entender el motivo de que no funciona
si cambio el array de array nombres, que no se actualice luego en el evento data del gridview.
Algo que he visto raro, es que cuando muestro los nombres de los escritores en la consola, se añade dos saltos de línea al principio,
cuando lo hace por primera vez.
Saludos