ListView - Anordnung nebeneinander....
-
- Beiträge: 143
- Registriert: Mo 30. Mär 2020, 12:37
ListView - Anordnung nebeneinander....
Hallo, ich hänge leider fest und finde keine Lösung; brauche also etwas Unterstützung.
Das Problem:
Ich habe eine ListView mit z.B. 4 Spalten. Beim Einlesen der Sätze aus der Datenbank (meinetwegen aus dem Jahr 2023) werde die Spalten 1 und 2 zeilenweise gefüllt. (das ist kein Problem).
Ein zweiter Datensatz der irgendwann mal aus dem Jahr 2022 kommt soll in der korrespondierenden Zeile zum Satz aus 2023 die Spalten 3 und 4 füllen (fungiert als Vergleichswert zum Jahr 2023).
Ich bekomme es nun nicht hin, erstens die richtige Zeile zu finden und dann in dieser Zeile die Einträge in die Spalten 3 und 4 zu machen.
Kann mir bitte jemand aufs Pferd helfen?
Ich hoffe, das war verständlich .....
Das Problem:
Ich habe eine ListView mit z.B. 4 Spalten. Beim Einlesen der Sätze aus der Datenbank (meinetwegen aus dem Jahr 2023) werde die Spalten 1 und 2 zeilenweise gefüllt. (das ist kein Problem).
Ein zweiter Datensatz der irgendwann mal aus dem Jahr 2022 kommt soll in der korrespondierenden Zeile zum Satz aus 2023 die Spalten 3 und 4 füllen (fungiert als Vergleichswert zum Jahr 2023).
Ich bekomme es nun nicht hin, erstens die richtige Zeile zu finden und dann in dieser Zeile die Einträge in die Spalten 3 und 4 zu machen.
Kann mir bitte jemand aufs Pferd helfen?
Ich hoffe, das war verständlich .....
- af0815
- Lazarusforum e. V.
- Beiträge: 6763
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: ListView - Anordnung nebeneinander....
Listview und DB haben mal nicht so wirklich was gemeinsam.
Das erste, kannst du die Staments so machen, das du alle Daten richtig bereits vorliegen hast, wenn nicht, so bist du im reinen Code von Pascal, das du dort deine Reihung zusammenbringst. Die Listview ist nur ein Darstellungsgeschichte. Also die Daten müssen so vorliegen, das man das in die Listview bekommt.
Ach ja, wenn man das Pferd nicht sieht, kann man es nicht beurteilen (ob es ein toter Schimmel oder ein alter Rappe ist) = Code.
Das erste, kannst du die Staments so machen, das du alle Daten richtig bereits vorliegen hast, wenn nicht, so bist du im reinen Code von Pascal, das du dort deine Reihung zusammenbringst. Die Listview ist nur ein Darstellungsgeschichte. Also die Daten müssen so vorliegen, das man das in die Listview bekommt.
Ach ja, wenn man das Pferd nicht sieht, kann man es nicht beurteilen (ob es ein toter Schimmel oder ein alter Rappe ist) = Code.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 143
- Registriert: Mo 30. Mär 2020, 12:37
Re: ListView - Anordnung nebeneinander....
Ja af0815, das es zwischen Datenbank und ListView keinen wirklichen Zusammenhang gibt, ist schon klar - und den Code kann ich nicht posten; den oder eine Idee dazu suche ich....
- af0815
- Lazarusforum e. V.
- Beiträge: 6763
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: ListView - Anordnung nebeneinander....
Wenn du im Selektion Statement eine Spalte von 1-4 dazubekommst hast du gewonnen. Der Rest ist ohne Daten oder Code nur raten ins blaue.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 143
- Registriert: Mo 30. Mär 2020, 12:37
Re: ListView - Anordnung nebeneinander....
werde ich nicht hinbekommen; die Daten kommen aus unterschiedlichen mit "join" verbundenen Tabellen.
Ich denke, die Herkunft der Daten ist auch egal - meinetwegen kommen sie sequenziell aus einem File.....
Na, dann warte ich mal auf mögliche andere Aussagen.
Ich denke, die Herkunft der Daten ist auch egal - meinetwegen kommen sie sequenziell aus einem File.....
Na, dann warte ich mal auf mögliche andere Aussagen.
- af0815
- Lazarusforum e. V.
- Beiträge: 6763
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: ListView - Anordnung nebeneinander....
Ein Join ist mal kein Hindernis (ausser für die Performance wenn man Pech hat), man kann das ganze mal in einen Sub-Select packen. Was ist das Kriterium für die Spalte. Es kommt für nicht wirklich heraus, wie du das in die Spalten packen willst.
Was heisst da korespondierender Datensatz aus 2023 ? Laut dem müsstest du Datensätze aus 2022 den gleichen Sätzen aus 2023 gegenüberstellen. Das sind so abstrakte Angaben, wenn es so unklar ist, weiche ich auf TSQL am MS Sqlserver aus und stelle die Daten mal in eine 2022 Temporär Tabelle, die Daten für 2023 und dann kann man das ganze so zusammenfügen wie man will.Beim Einlesen der Sätze aus der Datenbank (meinetwegen aus dem Jahr 2023) werde die Spalten 1 und 2 zeilenweise gefüllt. (das ist kein Problem).
Ein zweiter Datensatz der irgendwann mal aus dem Jahr 2022 kommt soll in der korrespondierenden Zeile zum Satz aus 2023 die Spalten 3 und 4 füllen (fungiert als Vergleichswert zum Jahr 2023).
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 143
- Registriert: Mo 30. Mär 2020, 12:37
Re: ListView - Anordnung nebeneinander....
mh - ich kann es wohl nicht gut genug beschreiben....
noch ein Versuch: Ich habe eine Tabelle, in der ich in EINER Zeile Werte aus 2023 mit dem Vorjahr 2022 vergleich wil.
Das Ergebnis soll also so aussehen:
Spalte1 Spalte2 Spalte3
Zeile 1 2023 2022
Zeile 2 Artikel 15 5,00€ 4,00€
und nicht so
Spalte1 Spalte2 Spalte3
Zeile 1 2023 2022
Zeile 2 Artikel 15 5,00€
Zeile 3 Artikel 15 4,00€
Die Preise sind in unterschiedlichen Tabellen (eben 2023 und 2022) gespeichert und kommen nacheinander. Wenn also der Satz 2022 kommt, bin ich in der ListView schon eine Zeile weiter und muß irgendwie wieder zurück in die 2.Zeile Spalte3.
noch ein Versuch: Ich habe eine Tabelle, in der ich in EINER Zeile Werte aus 2023 mit dem Vorjahr 2022 vergleich wil.
Das Ergebnis soll also so aussehen:
Spalte1 Spalte2 Spalte3
Zeile 1 2023 2022
Zeile 2 Artikel 15 5,00€ 4,00€
und nicht so
Spalte1 Spalte2 Spalte3
Zeile 1 2023 2022
Zeile 2 Artikel 15 5,00€
Zeile 3 Artikel 15 4,00€
Die Preise sind in unterschiedlichen Tabellen (eben 2023 und 2022) gespeichert und kommen nacheinander. Wenn also der Satz 2022 kommt, bin ich in der ListView schon eine Zeile weiter und muß irgendwie wieder zurück in die 2.Zeile Spalte3.
Re: ListView - Anordnung nebeneinander....
Kannst du mal den Code zeigen, damit man sieht, was du (ggf. falsch) machst?
Ich verstehe dein Problem so auch nicht wirklich. Glaskugel ist in der Reparatur.
Ich verstehe dein Problem so auch nicht wirklich. Glaskugel ist in der Reparatur.
-
- Beiträge: 1058
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: ListView - Anordnung nebeneinander....
Das sieht mir weniger nach einem Darstellungsproblem als einem Datenbankproblem aus. Wenn die Abfrage sauber aus der DB kommt stellt das jeder TDBGrid leicht dar.Joachim Raap hat geschrieben: So 15. Jan 2023, 22:21
Das Ergebnis soll also so aussehen:
Zeile 0 Spalte1 Spalte2 Spalte3
Zeile 1 ++++ 2023 2022
Zeile 2 Artikel 15 5,00€ 4,00€
Klassische Kreuztabelle nehme ich mal an (aus den rudimentären Informationen destilliert)
af0815 hat dir eine der Möglichkeiten schon skizziert.
Um hier eine auch nur halbwegs valide Aussage treffen zu können wäre folgendes nötig zu wissen:
-- Welcher SQL Server in welcher Version (die kochen alle ihr eigenes Süppchen und die Version sagt welche Funktionen zur Verfügung stehen)
-- Tabellenstruktur der relevanten Daten (sonst weiß man nicht welche Joins nötig sind)
-- ggfs auch Testdaten (Struktur und Daten) die man leicht in eine DB importieren kann.
Nur als Denkanstoß: Du benutzt einen SQL Server und die können das was du scheinbar möchtest auch darstellen. (also einen Jahresvergleich von Zahlen zu bestimmten Artikeln). Dann macht es wenig Sinn sich über Handarbeit von Daten in einem Listview Gedanken zu machen. Da ist dann SQL scripting angesagt. Suchbegriffe dazu: "MySQL Kreuztabelle","MySQL Pivot", "MySQL transform" .. analog auch mit dem Server deiner Wahl.
Zuletzt geändert von charlytango am So 15. Jan 2023, 23:12, insgesamt 1-mal geändert.
- af0815
- Lazarusforum e. V.
- Beiträge: 6763
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: ListView - Anordnung nebeneinander....
Ich gehe davon aus, das er eine pivot Transformation der Ergebnisse benötigt. Wenn ich richtig liege, geht das abhängig vom DB System oder man muss es in Pascal Coden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 1058
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: ListView - Anordnung nebeneinander....
kommt drauf an wie die Daten vorliegen, aber ich kann mir echt nicht vorstellen dass das ein halbwegs aktueller SQL Server nicht kann.
Doch solange er uns nichts genaueres mitteilt ist das alles nur Kaffesudlesen. In Hogwarts nimmt man dazu auch gerne Teeblätter.
Doch solange er uns nichts genaueres mitteilt ist das alles nur Kaffesudlesen. In Hogwarts nimmt man dazu auch gerne Teeblätter.
-
- Beiträge: 143
- Registriert: Mo 30. Mär 2020, 12:37
Re: ListView - Anordnung nebeneinander....
zunächst mal "Danke".
Ich habe noch mal überlegt und kam zum Schluß, daß der Hinweis auf "join" wohl die falsche Fährte ist.
Die erste Tabelle liefert nur irgendwelche Stammdaten und die zweite Tabelle die Werte dazu. Man kann das Problem auch beschreiben, wenn es nur die zweite Tabelle - also die mit den Werten - gäbe. Hier sind zu einem Artikel mehrere Sätze vorhanden; pro Jahr (einer aufgeteilt in Monate). In der ListView werden pro Artikel Werte aus dem aktuellen Jahr mit dem des Vorjahres gegenübergestellt. das führt derzeit bei mir dazu, daß gegliedert nach Artikeln die Jahre 2023 und 2022 untereinander stehen und nicht - wie gewünscht - nebeneinander in einer Zeile.
Ich suche eben eine Möglichkeit, beim Einlesen des Satzes für 2022 in die Zeile zu springen, in der zum Artikel X das Jahr 2023 steht um dort in der gleichen Zeile die Werte für 2022 darzustellen.
Mein bisheriger Code dazu (mit dem falschen Ergebnis); M enthält den Monat, Y enthält das aktuelle Jahr, VY enthält das Vorjahr:
Ich habe noch mal überlegt und kam zum Schluß, daß der Hinweis auf "join" wohl die falsche Fährte ist.
Die erste Tabelle liefert nur irgendwelche Stammdaten und die zweite Tabelle die Werte dazu. Man kann das Problem auch beschreiben, wenn es nur die zweite Tabelle - also die mit den Werten - gäbe. Hier sind zu einem Artikel mehrere Sätze vorhanden; pro Jahr (einer aufgeteilt in Monate). In der ListView werden pro Artikel Werte aus dem aktuellen Jahr mit dem des Vorjahres gegenübergestellt. das führt derzeit bei mir dazu, daß gegliedert nach Artikeln die Jahre 2023 und 2022 untereinander stehen und nicht - wie gewünscht - nebeneinander in einer Zeile.
Ich suche eben eine Möglichkeit, beim Einlesen des Satzes für 2022 in die Zeile zu springen, in der zum Artikel X das Jahr 2023 steht um dort in der gleichen Zeile die Werte für 2022 darzustellen.
Mein bisheriger Code dazu (mit dem falschen Ergebnis); M enthält den Monat, Y enthält das aktuelle Jahr, VY enthält das Vorjahr:
Code: Alles auswählen
case M of
1: begin
if StrToInt(StrPerJahr)=Y then
begin
item.Subitems.Add(StrPerJan); //6
item.Subitems.Add(StrPerGes); //7
end;
if StrToInt(StrPerJahr)=VY then
begin
for i:=0 to LVArtikel.Items.Count-1 do
begin
if LVArtikel.Items[i].SubItems[0]=StrArtNr then
begin
LVArtikel.Items[i].Subitems.Add(StrPerJan); //8
LVArtikel.Items[i].Subitems.Add(StrPerGes); //9
end
end;
end;
end;
2: begin
- af0815
- Lazarusforum e. V.
- Beiträge: 6763
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: ListView - Anordnung nebeneinander....
Ok, jetzt wird es klarer, ein reines Listview Problem und wie man die Daten darstellt. Ok, das ist nicht unbedingt mein Thema.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: ListView - Anordnung nebeneinander....
Ich bin, auch nach mehrmaligem lesen des Beitrages der Meinung, dass ein JOIN die Lösung ist.
Ohne aber eine genaue Definition der Tabellen und der Bezüge untereinander zu sehen, blicke ich absolut nicht durch.
Das liegt vielleicht nicht mal an den Versuchen, das Problem darzustellen, sondern vielleicht mehr an der Struktur der Tabellen....
Ohne aber eine genaue Definition der Tabellen und der Bezüge untereinander zu sehen, blicke ich absolut nicht durch.
Das liegt vielleicht nicht mal an den Versuchen, das Problem darzustellen, sondern vielleicht mehr an der Struktur der Tabellen....
Gruß, Michael
Re: ListView - Anordnung nebeneinander....
Nochmal zum Anfang:
Ob das so richtig ist, kann man deinem Code nicht entnehmen.
Du machst das ja im Prinzip schon in deinem Code, deshalb weiss ich nicht, was du noch wissen willst.Joachim Raap hat geschrieben: So 15. Jan 2023, 19:14 Ich bekomme es nun nicht hin, erstens die richtige Zeile zu finden und dann in dieser Zeile die Einträge in die Spalten 3 und 4 zu machen.
Code: Alles auswählen
for i:=0 to LVArtikel.Items.Count-1 do
begin
if LVArtikel.Items[i].SubItems[0]=StrArtNr then //Suchen
begin
LVArtikel.Items[i].Subitems.Add(StrPerJan); //Anhängen
LVArtikel.Items[i].Subitems.Add(StrPerGes); //Anhängen
end
end;