![]() |
Listview spalten addieren
Hallo,
ich stehe gerade etwas auf dem Schlauch und verstehe meine eigene produktion hier nicht mehr :D Folgende Konstellation: Ich habe eine Listview mit 4 Spalten! Spalte 2 ist der Einkaufspreis (EP), Spalte 3 der Verkaufspreis (VP) und Spalte 4 der Umsatz (U), EP und VP stehen in der Liste, die Spalte 4 für den Umsatz ist zunächst leer. Es soll der VP minus EP (Umsatz) in Spalte 4 angezeigt werden und der Gesamtumsatz (alle addiert) am Ende angezeigt werden!
Delphi-Quellcode:
So wie ich es jetzt zunächste gemacht habe, wird nur der Gesamtumsatz am Ende angezeigt und das ganze funktioniert nur
procedure TForm1.but_umsatzClick(Sender: TObject);
var L, Li : TListItem; EP, VP, U : string; i,q, U, U_gesamt : integer; begin U_gesamt := 0; for i := 0 to liv_transfers.Items.Count - 1 do begin for Q := 2 to liv_transfers.Items[I].SubItems.Count - 1 do begin EP := liv_transfers.Items[I].SubItems[0]; VP := liv_transfers.Items[I].SubItems[1]; EP:= ZahlohnePunkte(EP); VP := ZahlohnePunkte(VP); U := strtoint(VP) - strtoint(EP); U_gesamt := U + U_gesamt; end; end; L := liv_transfers.items.add; L.Caption := ('_______________'); L.SubItems.Add('___________'); L.SubItems.Add('___________'); L.SubItems.Add('___________'); Li := liv_transfers.items.add; Li.Caption := ('Gesamt'); Li.SubItems.Add(''); Li.SubItems.Add(''); Li.SubItems.Add(ZahlmitPunkten(inttostr(U_gesamt))); end; wenn manche Umsätze schon in Spalte 4 stehen, wenn Spalte 4 komplett leer ist geht es nicht (for Q := 2 to liv_transfers.Items[I].SubItems.Count - 1 do)???. Ich blick da grad nicht mehr durch?!?! Hoffe es kann jmd helfen! |
Re: Listview spalten addieren
Trenne die Logik von der Darstellung. Eine Listview ist zur Anzeige von Daten gedacht und nicht zur Datenhaltung.
|
Re: Listview spalten addieren
Das ist mir egal, dann werde ich sie eben missbrauchen!
Fakt ist, dass es geht, Frage ist nur wie! |
Re: Listview spalten addieren
Wozu die innere Schleife? Du weißt doch, wo was steht.
Delphi-Quellcode:
Nun noch unten gesamt ausgeben und gut is. Auf Dauer wirst Du mit Deiner Einstellung aber nicht glücklich werden, das kann ich Dir prophezeien.
var i,gesamt,Umsatz: integer;
begin gesamt := 0; for i := 0 to ListView.Items.Count - 1 do begin Umsatz := StrToInt(ListView.Items[i].SubItems[1]) - StrToInt(ListView.Items[i].SubItems[2]); ListView.Items[i].SubItems[3] := IntToStr(Umsatz); inc(gesamt,Umsatz); end; [edit] Addition in Subtraktion geändert, Denkfehler [/edit] |
Re: Listview spalten addieren
Zitat:
Listenindex überschreitet das Maximum(2); |
Re: Listview spalten addieren
Dann setz den Index hinter SubItems jeweils um 1 runter.
|
Re: Listview spalten addieren
hab ich, kommt der gleiche Fehler
|
Re: Listview spalten addieren
Zeig nochmal den aktuellen Code. Und Du hast auch ganz sicher 4 Spalten?
|
Re: Listview spalten addieren
Achtung 4 Spalten = 3 SubItems
|
Re: Listview spalten addieren
Das war mir später auch eingefallen, siehe #6. Aber dann sollte es jetzt eigentlich passen.
|
Re: Listview spalten addieren
War auch nicht an dich, sondern den TE gerichtet
|
Re: Listview spalten addieren
Zitat:
der jetzige Code:
Delphi-Quellcode:
Und ja ich habe 4 Spalten
Umsatz_gesamt := 0;
for i := 0 to liv_transfersalltime.Items.Count - 1 do begin Umsatz := StrToInt(ZahlohnePunkte(liv_transfersalltime.Items[i].SubItems[1])) - StrToInt(ZahlohnePunkte(liv_transfersalltime.Items[i].SubItems[0])); liv_transfersalltime.Items[i].SubItems[2] := IntToStr(Umsatz); inc(Umsatz_gesamt,Umsatz); Umsatz_gesamt := Umsatz_gesamt + Umsatz; end; Name, Einkaufspreis, Verkaufspreis, Umsatz Die Listview wird mit Hilfe dieser procedure aus einer Datei gefüllt:
Delphi-Quellcode:
Bsp-Datei:
procedure ListViewLoadFromFile(Filename : String; ListView : TsListView);
{Copyright Christoph Duwald 2005} var TextFile,TextFile2 : TStringList; NewListItem: TListItem; i,x: integer; begin try ListView.Clear; TextFile:= TStringList.Create; TextFile2:= TStringList.Create; TextFile.LoadFromFile(Filename); //ListView aus der Datei laden. TextFile2.Delimiter:='#'; //Trennzeichen, wie beim Speichern angegeben for i:=0 to TextFile.Count-1 do // Geht alle Zeilen durch (ohne Überschriften) begin TextFile2.DelimitedText:=TextFile.Strings[i]; //Erste Zeile aus der gespeicherten Datei in die Richtigen Spalten schreiben NewListItem := ListView.Items.Add; //Neues Item anlegen NewListItem.ImageIndex:=StrToInt(TextFile2.Strings[0]); //Index des Images für diese Zeile NewListItem.Caption :=TextFile2.Strings[1]; //Erste Spalte for x:=2 to TextFile2.Count-1 do //Geht die restlichen Spalten durch begin NewListItem.SubItems.Add(TextFile2.Strings[x]); //Spalten mit dem text aus der Datei füllen end; end; finally TextFile.Free; TextFile2.Free; end; end;
Code:
Vlt hängt es damit zusammen?
0#Badstuber#940.000#2.223.600
0#Breno#310.000#676.200 EDIT: Die Subitems[0] und [1] stimmen, habe es mir in einem testmemo ausgeben lassen und eine Spalte 4 existiert auch definitiv! |
Re: Listview spalten addieren
Wo soll die 4. Spalte denn herkommen? Ich sehe da einen ImageIndex, einen Namen und 2 Zahlen, damit komme ich auf 3 Spalten.
[edit]Aber gut:
Delphi-Quellcode:
So müsste es immer passen.[/edit]
Umsatz_gesamt := 0;
for i := 0 to liv_transfersalltime.Items.Count - 1 do begin Umsatz := StrToInt(ZahlohnePunkte(liv_transfersalltime.Items[i].SubItems[1])) - StrToInt(ZahlohnePunkte(liv_transfersalltime.Items[i].SubItems[0])); if liv_transfersalltime.Items[i].SubItems.Count < 3 then liv_transfersalltime.Items[i].SubItems.Add(IntToStr(Umsatz)) else liv_transfersalltime.Items[i].SubItems[2] := IntToStr(Umsatz); inc(Umsatz_gesamt,Umsatz); // doppelt gemoppelt: Umsatz_gesamt := Umsatz_gesamt + Umsatz; end; |
Re: Listview spalten addieren
kA was du meinst, wie gesagt 4 Spalten:
Name, Einkaufspreis, Verkaufspreis, Umsatz Aus der Datei werden Name, Einkaufspreis und Verkaufspreis in die Listview geladen, die Umsatzspalte (Spalte4!!!) bleibt dabei leer! Wie in meinem ersten Beitrag bereits angemerkt und durch gerade erneutes Testen stelle ich fest, dass das ganze funktioniert wenn in der Umsatzspalte bereits etwas steht!!! Also hat die Listview (speziell liv_transfersalltime.Items[i].SubItems[2] := IntToStr(Umsatz); ) irgend ein Problem mit der leeren Spalte4 oder nicht??!?! EDIT: Zitat:
aaaah ok, jetzt gehts :D EDIT2: hat sich erledigt xD |
Re: Listview spalten addieren
Beim Import, werden dann aber nur 3 Spalten erstellt.
|
Re: Listview spalten addieren
Hallo,
also nach meiner unmaßgeblichen Meinung füllst Du dein Listview mit dem gezeigten Textfile, was aber nur eine Cption und 2 (zwei) SubItems befüllt. Häng doch einfach eine DummySpalte (#_) hinten dran und schau mal was passiert. Ciao Frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz