Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Selected ListView-Query-Ergebnis in Variable speichern (https://www.delphipraxis.net/190154-selected-listview-query-ergebnis-variable-speichern.html)

Yikes 5. Sep 2016 13:41

Selected ListView-Query-Ergebnis in Variable speichern
 
Hallo, ich brauche mal wieder Hilfe. Eigentlich habe ich so ziemlich dasselbe Problem wie letztes Mal. Irgendwie krieg ich das ganze noch nicht so in den Kopf rein...

Ich habe mir eine ListView erstellt:

Delphi-Quellcode:
ListView1.BeginUpdate;
  try
    while not FDStoredProc1.eof do
    begin
      LItem := ListView1.Items.Add;

      LItem.Detail := FDStoredProc1.FieldByName('Vorname').AsString + ' ' + FDStoredProc1.FieldByName('Name').AsString;
      FDStoredProc1.Next;
    end;
  finally
    ListView1.EndUpdate;
    ListView1.Visible := true;
  end;
Bei einem Klick auf den ListView-Button, soll das Ergebnis eines Queries in einer Variable gespeichert werden.

Delphi-Quellcode:
procedure TForm1.ListView1ButtonClick(const Sender: TObject;
  const AItem: TListItem; const AObject: TListItemSimpleControl);
var
  LLocal : TRec;
begin

  if Assigned(ListView1.Selected) then begin
    LLocal.wert1 := FDStoredProc1.FieldByName('SpalteA').AsFloat;
    LLocal.wert2 := FDStoredProc1.FieldByName('SpalteB').AsFloat;
  end;
end;
Das bringt mir leider nur die allerletzten Werte aus der Datenbank. Ist mir auch relativ klar, warum ich nur den letzten Wert bekomme, allerdings weiß ich nicht, wie ich diesen Fehler beheben kann.

mkinzler 5. Sep 2016 13:54

AW: Selected ListView-Query-Ergebnis in Variable speichern
 
Ich würde die benötigten Werte zusätzlich im ListViewItem hinterlegen ( Objects oder Tag)

Yikes 5. Sep 2016 14:16

AW: Selected ListView-Query-Ergebnis in Variable speichern
 
Zitat:

Zitat von mkinzler (Beitrag 1346831)
Ich würde die benötigten Werte zusätzlich im ListViewItem hinterlegen ( Objects oder Tag)

Sorry, wenn ich jetzt irgendwas offensichtliches nicht kapiert habe...

Bei Objects bekomme ich die Meldung, dass es eine Read-Only Eigenschaft ist und Tag nimmt anscheinend nur Int-Werte.

bra 5. Sep 2016 14:30

AW: Selected ListView-Query-Ergebnis in Variable speichern
 
Man kann in ListViewItem.Tag einen Wert, z.B. die ID des zugehörigen Objekts in der Datenbank, speichern.
Im OnClick kannst du den Tag dann auslesen und weisst, welche Daten du aus der Datenbank holen muss (die mit der ID, die in Tag steht).

mkinzler 5. Sep 2016 14:37

AW: Selected ListView-Query-Ergebnis in Variable speichern
 
Delphi-Quellcode:
var
  TitInfo = class
    ID: Integer;
    A, B: Float
  end;
Delphi-Quellcode:
it: TitInfo;

...

ListView1.BeginUpdate;
  try
    while not FDStoredProc1.eof do
    begin
      it := TitInfo.Create;
      it.A := FDStoredProc1.FieldByName('SpalteA').AsFloat;
      it.B := FDStoredProc1.FieldByName('SpalteB').AsFloat;

      LItem := ListView1.Items.Add;
      LItem.Detail := FDStoredProc1.FieldByName('Vorname').AsString + ' ' + FDStoredProc1.FieldByName('Name').AsString;
      LItem.Tag := Integer( it);
       
      FDStoredProc1.Next;
    end;
  finally
    ListView1.EndUpdate;
    ListView1.Visible := true;
  end;
Delphi-Quellcode:
procedure TForm1.ListView1ButtonClick(const Sender: TObject;
  const AItem: TListItem; const AObject: TListItemSimpleControl);
var
  LLocal : TRec;
  it: TitInfo;
begin

  if Assigned(ListView1.Selected) then begin
    it := TitInfo(AItem.Tag);
    LLocal.wert1 := it.A;
    LLocal.wert2 := it.B;
  end;
end;

bra 5. Sep 2016 14:55

AW: Selected ListView-Query-Ergebnis in Variable speichern
 
Ähm... ist das korrekt, dass die Klasse ins Property Tag gespeichert wird? Sollte das nicht eher ins Data oder Object sein (hab Delphi gerade nicht zur Hand).

mkinzler 5. Sep 2016 14:58

AW: Selected ListView-Query-Ergebnis in Variable speichern
 
Man kann es, wie geschrieben auch zu Objects hinzufügen. Funktioniert aber auch so.

Man darf halt nicht vergessen beim Freigeben der Liste auch die verlinkten Objekte mit freizugeben ( wenn kein ARC)


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 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