Einzelnen Beitrag anzeigen

Marco Steinebach

Registriert seit: 4. Aug 2006
502 Beiträge
 
Delphi 5 Enterprise
 
#9

AW: Tabellenzeilen in virtueller ListView darstellen???

  Alt 1. Mär 2021, 19:48
Hallo zusammen,
Was den "eindeutigen Identifier" angeht, hab ich den, natürlich, aber da sind, werden Datensätze gelöscht, Löcher drin, sprich:
1, 2, 5, 6, 7 (5 Elemente)
und die List hätte im onData gern für das Item 3 einen Datensatz, für den es aber keinen Identifier mehr gibt.

Falls nochmal jemand drüber fällt, hier die Lösung:
Zunächst brauchen wir mal die wirkliche Menge der Einträge, die in der Listview angezeigt werden sollen:
Code:
query.sql.text := 'select count(*) as anzahl from adressen';
query.open;
listview1.items.count := query.fieldByName('anzahl');
query.close;
Dann brauchen wir, bevor es losgeht, die Spaltenbreiten für die einzelnen Spalten der Listview, hier nur mal als Beispiel:
Code:
query.sql.text := 'select suchbegriff, char_length(suchbegriff) as laenge from adressen order by laenge desc';
query.open;
listview1.columns[0].width := listview1.canvas.textWidth(abfrage.fieldByName('Suchbegriff').asString);
query.close;
query.sql.text := 'select Nachname, char_length(nachname) as laenge from adressen order by laenge desc';
...
Ist zwar ein bisschen mühsam, aber mir will nicht einfallen, wie man die Abfragen für jede Spalte kombinieren könnte.
Und zum guten Schluss brauchen wir das onData für die Listview:
Code:
// irgendwo beim Erstellen der Listview:
query.sql.text := 'select row_number() over (order by Nachname) as x, nachname, vorname from adressen;';
query.open;
// im eigentlichen onData:
query.locate('x', item.index, []);
item.caption := query.fieldByName('Suchbegriff');
Herzlich grüßt
Marco
Marco Steinebach
  Mit Zitat antworten Zitat