Shell 14-03-2024, 13:51
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. Huh


Saludos
tercoide 14-03-2024, 00:19
Muchos saben que yo soy fanático de armar equipos de trabajo, probablemente la antítesis del programador solitario, así que aquí voy de nuevo:

que os parece hacer un programa en el que participemos TODOS los usuarios habituales del foro???????????????????

Si somos menos de 10, no vale.

1-Terco
2-...
tincho 13-03-2024, 23:53
Hola amigos.
Le comparto una función que sirve para averiguar cuando ocupa un directorio, o mejor dicho cuanto es la suma de todos los archivos que contiene.
En realidad son dos funciones una que lista todos los archivos (ScanFiles) y otra que los contabiliza (DirSize).

El primer argumento es obligatorio pues es el directorio a analizar y el segundo, que es booleano indica si se contabilizaran los enlaces simbólicos
Código:
'' <b>RAD Extension.</b><br>
'' Return the directory size in bytes. The first argument is mandatory because it is the directory to be analyzed and the second, which is boolean, indicates whether symbolic links will be counted.
Public Function DirSize(sDir As String, bSymbolic As Boolean) As Long
  Dim a As String[]
  Dim f As String
  Dim z As Long
  a = ScanFiles(sDir,,,, True) 'Esta es la otra función
  For Each f In a
    z = z + Stat2(f)["size"]
  Next
  Return z
End

Código:
'' <b>RAD Extension.</b><br>
'' Return a files list nested in a directory using a find command
Public Function ScanFiles(sPath As String, Optional ext As String[], Optional maxdepth As Integer, Optional sFilter As String, Optional bSymbolic As Boolean) As String[]

  Dim out As New String[]
  Dim t As String
  Dim ex As String
  Dim sTmp As String
  Dim aOut As New String[]
  Dim sType As String
  Dim sMax As String

  If maxdepth > 0 Then
    sMax = " -maxdepth " & CStr(maxdepth)
  Endif

  If bSymbolic Then
    sType = " -type f,l"
  Else
    sType = " -type f"
  Endif

  If Exist(sPath) Then
    If ext Then
      Select ext.Count
          'Case 0
          '  Shell "find '" & sPath & "'" & sMax & sType & " -printf '%p\n' 2>&1" To t
        Case 1
          Shell "find '" & sPath & "'" & sMax & sType & " -name '*.'" & ext[0] & " -printf '%p\n' 2>&1" To t
        Case Else
          ex = "\\( -name \"*."
          ex &= ext.Join("\" -o -name \"*.")
          ex &= "\" \\)"
          Shell "find '" & sPath & "'" & sMax & sType & ex & " -printf '%p\n' 2>&1" To t
      End Select
    Else
      Shell "find '" & sPath & "'" & sMax & sType & " -printf '%p\n' 2>&1" To t
    Endif

    out = Split(t, "\n")

    If out.Count > 0 Then
      If out[out.Max] = "" Then
        out.Remove(out.Max, 1)
      Endif
    Endif

  Endif

  If sFilter <> "" Then
    For Each sTmp In out
      If InStr(sTmp, sFilter) > 0 Then
        aOut.Add(sTmp)
      Endif
    Next
  Else
    aOut = out.Copy()
  Endif

  Return aOut

End
Páginas (557):    1 92 93 94 95 96 557   
Bienvenido, Invitado
Tienes que registrarte para poder participar en nuestro foro.
Recordarme?
Miembros: 284
Último miembro: VALENTIN KORONADO
Temas del foro: 1,719
Mensajes del foro: 8,920
Últimos temas
Publicidad
Foro: Sobre gambas-es.org
Último mensaje por: Shordi, 18-06-2025, 07:35
Respuestas: 5 - Vistas: 124
Web con gambas, a ver si ...
Foro: WebApp/WebForms
Último mensaje por: jackrobot, 16-06-2025, 17:11
Respuestas: 40 - Vistas: 31,676
Un sistema de ayudas cont...
Foro: Videotutoriales
Último mensaje por: Shordi, 30-05-2025, 13:22
Respuestas: 0 - Vistas: 169
Crear una aplicación para...
Foro: Bases de Datos
Último mensaje por: Shell, 29-05-2025, 20:11
Respuestas: 11 - Vistas: 1,186
Paso de parámetros a una ...
Foro: General
Último mensaje por: guizans, 29-05-2025, 19:27
Respuestas: 9 - Vistas: 730
Powered By MyBB, © 2002-2025 MyBB Group.
Made with by Curves UI.