ListIconGadget sortieren

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
marcelx
Beiträge: 424
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

ListIconGadget sortieren

Beitrag von marcelx »

Hallo zusammen,

ich zeige in ein ListIconGadget die sortierten Daten.
Nachträgliche werden Daten in der ListIconGadget gepakt

Wie kann ich die Daten sortieren?

Code: Alles auswählen

If OpenWindow(0, 100, 100, 300, 300, "ListIcon sort", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ListIconGadget(0, 5, 5, 300, 150, "Col 1", 100, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
  AddGadgetColumn(0, 1, "Col 2", 100)
  ; Daten
  AddGadgetItem(0, -1, "A"+Chr(10)+"12 ")
  AddGadgetItem(0, -1, "C"+Chr(10)+"17")
   
  ; nachträgliche Daten
  AddGadgetItem(0, -1, "B"+Chr(10)+"18")
   
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow
EndIf
Danke und Gruß
MarcelX
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
marcelx
Beiträge: 424
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: ListIconGadget sortieren

Beitrag von marcelx »

Ich habe 35000 Daten und suche nach ein schnelle Lösung.
Ich habe 2 Lösungsansätze:
1) Daten vom ListIconGadget in eine Array schreiben, mit SortStructuredArray sortieren und im ListIconGadget schreiben

2) Daten in eine DB (:memory:) schrieben und lesen mit "ORDER BY" und im ListIconGadget schreiben

Gibt es andere Möglichkeiten?
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: ListIconGadget sortieren

Beitrag von NicTheQuick »

35000 Datenzeilen in einem ListIconGadget sind ganz schöner Overkill. Für solche Datenmengen ist ein ListIconGadget nicht geeignet. Ich kann mir vorstellen, dass das ziemlich langsam ist, oder?

Aber zur eigentliche Frage:
Generell würde ich die Daten immer in einem Array oder einer LinkedList halten und mit SetGadgetItemData() für jede Zeile den Pointer zu den Originaldaten speichern, also zum Element im Array oder der LinkedList. Das ist praktisch, wenn man nach einem Klick auf ein Element in der Liste schnell auf die Originaldaten zugreifen will. Außerdem bietet es die Möglichkeit mehr zu jeder Zeile zu speichern als man im ListIconGadget als Spalten darstellt.
Zum Sortieren kann man dann ganz einfach mit SortStructuredArray oder SortStructuredList die Original-Daten sortieren. Und statt das ListIconGadget danach zu leeren und neu zu füllen, kann man einfach den Inhalt aller Zeilen mit SetGadgetItemText() ersetzen, denn das geht schneller als 35000 mal AddGadgetItem() aufzurufen.

Mit der Datenbankmethode hast du möglicherweise bessere Sortiermöglichkeiten, aber dann würde ich die Daten ebenfalls von Anfang an dort reinschreiben und das nicht nur als temporäre Lösung zum Sortieren nutzen.
Bild
Benutzeravatar
marcelx
Beiträge: 424
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: ListIconGadget sortieren

Beitrag von marcelx »

Danke NicTheQuick für deine Rückmeldung und Anregung.
Die Daten sind aus eine Datenbank und können geändert, gelöscht oder neu definiert werden und nach Abfrage zurück in der DB gespeichert werden.
Die Daten in eine List abzulegen und mit SortStructuredList sortieren und mit SetGadgetItemText() ersetzen müsste so funktionieren.
Win-10, PB 5.31 (Windows - x86)
Antworten