Shell 15-04-2021, 14:01
Buenas!.

Pues ya que estamos. Tengo una tabla tal como esta.

[Imagen: 1c1Gyun.png]

Tiene dos columnas, nombres y edades por ejemplo. La columna de las edades es editable.
Me gustaría ordenarla tanto por nombres como edades y un orden que sea "natural" ( por decirlo de alguna manera).

Como tal, no son números lo que vemos en la tabla, son textos o caracteres. De ahí el problema.

De principio este es el código:

Código:
Private nombres As New String[]
Private edades As New Byte[]

Public Sub Form_Open()

  nombres = ["Ana López Ruíz", "Carlos García Domingo", "José Zampaña Castillo", "Olivia Torres Ramirez",
    "Antonio Pardo Casas", "María Castro Arenas", "Luis Cavanillas Torres", "Enrique Duarte Panda",
    "Manuel Bonilla Perez", "Elisa Gutierrez Loma"]

  With tbEjemplo
    .Header = tbEjemplo.Horizontal
    .Rows.Count = nombres.Count
    .Columns.Count = 2
    .Columns[0].Title = "Nombres"
    .Columns[0].Alignment = Align.Center
    .Columns[1].Title = "Edades"
    .Columns[1].Alignment = Align.Center
    .Sorted = True  
  End With

  edades.Resize(nombres.Count)

End

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

  If Column = 0 Then tbEjemplo[Row, 0].Text = nombres[Row]
  If Row Mod 2 = 0 Then tbEjemplo[Row, Column].Background = &hDDDDFF
  tbEjemplo.Columns[0].Width = -1 'Ancho automático

End

Public Sub tbEjemplo_Activate()

  If tbEjemplo.Column = 0 Then tbEjemplo.Edit

End

Public Sub tbEjemplo_Click()

  If tbEjemplo.Column = 1 Then tbEjemplo.Edit

End

Public Sub tbEjemplo_Save(Row As Integer, Column As Integer, Value As String)

  tbEjemplo[Row, Column].Text = Value
  If Column = 1 Then
    edades[Row] = Value
  Else
    nombres[Row] = Value
  Endif

End

Public Sub tbEjemplo_ColumnClick(Column As Integer)

  tbEjemplo.Save

  With tbEjemplo
    '.Sorted = True
    .Columns.Sort = Column
  End With  
  OrdenarTabla(tbEjemplo, Column, tbEjemplo.Columns.Ascending, Column = 1)
    
End

Public Sub OrdenarTabla(latabla As TableView, Column As Integer, ascendente As Boolean, numerico As Boolean)

  Dim z As New String[]
  Dim y As New String[]
  Dim s As String
  Dim i, j As Integer

  For i = 0 To latabla.Rows.Max
    If numerico Then
      s = latabla[i, Column].Text
      s = String(5 - Len(s), "0")
    Else
      s = latabla[i, Column].Text
    Endif
    For j = 0 To latabla.Columns.Max
      s &= "-" & latabla[i, j].Text
    Next
    z.Add(s)
  Next

  If ascendente Then
    z.Sort(gb.Ascent)
  Else
    z.Sort(gb.Descent)
  Endif

  For i = 0 To z.Max
    y = Split(z[i], "-")
    For j = 1 To y.Max
      latabla[i, j - 1].Text = y[j]
    Next
  Next

End

'Modificado para el ejemplo usando el disponible en la ayuda online de Gambas
' Public Sub tbEjemplo_Sort()
'
'   Dim Values, ValueSorted As New String[]
'   Dim Nx, iNx As Integer
'
'   ' Load sort column into string array
'   For Nx = 0 To tbEjemplo.Rows.Max
'     Values.Add(tbEjemplo[Nx, tbEjemplo.Columns.Sort].Text)
'   Next
'
'   ' Copy values to new array and sort it based on status of sort indicator
'   ValueSorted = Values.Copy()
'   ValueSorted.Sort(IIf(tbEjemplo.Columns.Ascending, gb.Ascent, gb.Descent))
'
'   ' Iterate through table swapping appropriate values
'   For Nx = 0 To ValueSorted.Max
'     For iNx = 0 To tbEjemplo.Columns.Max
'       Swap tbEjemplo[Nx, iNx].Text, tbEjemplo[Values.Find(ValueSorted[Nx], 0, Nx), iNx].Text
'     Next
'
'     ' Pick up new order to preserve proper handling of indexing and duplicate values
'     Values.Clear()
'     For iNx = 0 To tbEjemplo.Rows.Max
'       Values.Add(tbEjemplo[iNx, tbEjemplo.Columns.Sort].Text)
'     Next
'   Next
'
'   tbEjemplo.Refresh()
'
' End

No tengo problema con ordenar los nombres, pero si con los números.
Con los nombres:

[Imagen: ZmoIYn2.png]

Con los números (texto).

[Imagen: ztUzgWi.png]

 ¿ Qué estoy haciendo mal ?.

Podría crear un array y ordenar esos números y luego mostrarlos, pero entonces,¿ que hago con la columna de los nombres ?.
¿ Qué debería hacer para que quedasen juntos el nombre y la edad en su fila correspondiente al ordenarse ?.

Marchando el código.

Algo complicado...(Esto hubiera sido otro mensaje, contestando al anterior..pero es otro lio con el editor).
O al menos no encuentro la forma adecuada.

17.7.4 GridView - Sorting the data

El ejemplo se puede bajar en alemán, se puede traducir. Desde Gambas se puede traducir ciertas partes de la aplicación. Lo que vemos
se traduce, el contenido de un botón, la parte visual de un formulario.

Pregunto. Si el ejemplo si se sube a la comunidad. ¿ En que  idioma debe subirse ?

"Sprichst du Deutsch ? "

En parte me parece enrevesado, crear una clase. Y por otro lado que aún no se haya solucionado o pretendido dar una solución en el IDE de Gambas.
O es propio de la librería.

Saludos
Archivos adjuntos
.gz
EjemploConTabla-0.0.1.tar.gz (Tamaño: 12.72 KB Descargas: 2)
Shell 15-04-2021, 13:18
Buenas!.

En el tutorial de Gambas que estaba leyendo para repasar encontré sentencias o formas de escribir el código de otra manera.
Pueden cambiarte la forma de escribir ciertas instrucciones en Gambas.

Supongamos el for, que se me hace muy raro. Nosotros declaramos en una línea la variable y luego la usaríamos en el bucle.
Ahora que veo la forma me recuerda en parte a "Java".

Código:
Public Sub Ejemplo2()
 
  For a As Integer = 0 To 10
    Print "Paso " & a
  Next
 
End

¿ Qué pasa en esa línea ?.

Bien, pues que en el caso de que solo vayamos a usar la variable "a" una vez puede valernos.
Si esa misma variable la usáramos en otra parte del mismo procedimiento o función, no nos vale y debemos hacerlo
de la forma tradicional.

Otra es el no declarar las variables automáticamente.. jajaja..

Creo que he visto algo más, pero ahora no me acuerdo (la fuerza de la costumbre. Tongue )

¿ Qué otras habéis visto vosotros y os acordaís ?.

Posiblemente conozcáis el pdf.  Ah, pues mejor os muestro la wiki. Si ya quereís bajaros el pdf, seguro que lo encontráis.

Programming Gambas from Zip

Tiene cosas que a vece me choca, cada uno escribe el  código como quiere. Las declaraciones de las variables me mata en ciertas partes del libro.
Opino que si quieres enseñar tienes que enseñar bien a hacer las cosas desde el principio. Hay que ir "modelando" una buena forma de hacer
las cosas. Pero no quiero quitarle meritos al que ha creado el tutorial. En los libros pasa igual. No hay nada perfecto. Bueno si...yo. Que era coña.. Big Grin

Dejé parado el libro cuando llegué al tema de ordenar un TableView o GridView. Si, la propiedad sort que no existe como tal.
Comencé a liarme a buscar códigos parecidos, de Vuott, de otros compañeros. Pero me parece que no acabé de solucionar el problema.
A ver si con tranquilidad os subo un ejemplo y hablamos de soluciones. A veces cuando leo y encuentro algo que no entiendo, no paro,
no encuentro solución y me frusto, me fusto mucho!.

Saludos y buen día.
tincho 15-04-2021, 11:45
Esta función devuelve el nombre del directorio inmediatamente superior de una ruta que se pasa y ademas quita todos los niveles superiores a este, trabaja similar a la función nativa BaseName pero con el directorio.
Código:
'' <b>RAD Extension.</b><br>
'' Returns the directory without the path to it, that is, it returns the name of the directory. if you pass "/home/user/music" it will return "music"

Static Public Function BaseDir(Path As String) As String

  Dim strBase As String
  Dim stx As New String[]

  If InStr(Path, "/") > 0 Then
    stx = Split(Path, "/")
    strBase = stx[stx.Max]
  Endif

  Return strBase

End
Saludos
Páginas (557):    1 454 455 456 457 458 557   
Bienvenido, Invitado
Tienes que registrarte para poder participar en nuestro foro.
Recordarme?
Miembros: 285
Último miembro: XLRG
Temas del foro: 1,720
Mensajes del foro: 8,934
Últimos temas
Archivos .ods
Foro: General
Último mensaje por: tincho, 01-07-2025, 18:54
Respuestas: 8 - Vistas: 161
Publicidad
Foro: Sobre gambas-es.org
Último mensaje por: tincho, 01-07-2025, 18:48
Respuestas: 6 - Vistas: 294
Web con gambas, a ver si ...
Foro: WebApp/WebForms
Último mensaje por: tincho, 01-07-2025, 17:47
Respuestas: 41 - Vistas: 32,382
Un sistema de ayudas cont...
Foro: Videotutoriales
Último mensaje por: guizans, 22-06-2025, 19:55
Respuestas: 3 - Vistas: 274
Crear una aplicación para...
Foro: Bases de Datos
Último mensaje por: Shell, 29-05-2025, 20:11
Respuestas: 11 - Vistas: 1,420
Powered By MyBB, © 2002-2025 MyBB Group.
Made with by Curves UI.