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/)
-   -   Delphi Zeile von ListView1 in ListView2 "Kopieren" (https://www.delphipraxis.net/17401-zeile-von-listview1-listview2-kopieren.html)

Albi 4. Mär 2004 18:02


Zeile von ListView1 in ListView2 "Kopieren"
 
Hallo alle zusammen,

ich habe wieder mal ein kleines Problem. Hierbei handelt es sich um eine ListView Kompo.

Folgendes ich lese in der 1. LV Werte aus einer Abfrage und trage diese da rein, nun will, wenn man eine Zeile anklickt, diese in die 2.LV Kopieren. Das funtz auch aber irgendwie steht die erste Spalte oben und und der Rest ein Zeile tiefer. Ich habe jetzt schon überall gesucht aber nichts gefunden.

Christian Seehase 4. Mär 2004 18:54

Re: Zeile von ListView1 in ListView2 "Kopieren"
 
Moin Albi,

wie wär's denn, wenn Du uns mal an den Ergebnissen Deiner Bemühungen teilhaben lässt, sprich:
Wie hast Du's denn versucht?

Albi 4. Mär 2004 21:35

Re: Zeile von ListView1 in ListView2 "Kopieren"
 
So, hier meine bisherigen Ergebnisse.

Über den folgenden Code schreibe ich die Daten in die erste ListView.

Code:
With Form14.LVSeaResult Do
  Begin
   While Not Form1.QSeaStPrint.Eof Do
      Begin
        For i := 0 To pred(Form1.QSeaStPrint.FieldCount) Do
        Begin
          If i = 0 Then
          Begin
            ListItem := Items.Add;
            ListItem.Caption := Form1.QSeaStPrint.Fields[0].asString;
          End
          Else
            Begin
              ListItem.SubItems.Add(Form1.QSeaStPrint.Fields[1].asString);
              ListItem.SubItems.Add(Form1.QSeaStPrint.Fields[2].asString);
              ListItem.SubItems.Add(Form1.QSeaStPrint.Fields[3].asString);
              QPLZOrtSQL('Select * from "'+DBPath+DBPlz+'" WHERE ID = '+IntToStr(Form1.QSeaStPrint.Fields[4].AsInteger));
              ListItem.SubItems.Add(Form1.QPLZOrt.FieldByName('Plz').AsString);
              ListItem.SubItems.Add(Form1.QPLZOrt.FieldByName('Ort').AsString);
            end;
        End;
        Form1.QSeaStPrint.Next;
     End;
Ich habe es mich Assign versucht aber da habe ich nur alle Zeilen kopieren können, dann habe ich es mit folgenden Code versucht.

Code:
Form14.LVSeaPrint.Items.Add.Caption:= Form14.LVSeaResult.ItemFocused.Caption;
Hiermit bekomme ich schon mal die 1. Spalte ordentlich übertragen.

Und dann bin am Ende mit meinem Latein, entweder ich bekomme ne Fehlermeldung oder es passiert garnicht und ich es ahne es schon, die Lösung ist soeinfach.

Robert_G 4. Mär 2004 23:48

Re: Zeile von ListView1 in ListView2 "Kopieren"
 
Ich würde den Code, zum Füllen der ListView aus der DB, etwas dynamischer gestalten. So wie er jetzt ist wird er bei Änderungen der Daten/Abfrage nicht mehr richtig funktionieren.
Vielleicht hilft dir das "SQL Ergebnis in einer Listview Komponente anzeigen?".
Das Kopieren des Items könnte so klappen (ungetestet nur drauf-los-getippt!)

Delphi-Quellcode:
Var
  SrcListItem :TListItem; //Hier weiß ich jetzt nicht, wie der Datentyp heißt...
Begin
  SrcListItem := nil;
  SrcListItem := Form14.LVSeaResult.ItemFocused;

  Assert(Assigned(SrcListItem),'LVSeaResult.ItemFokused is not assigned');

  With TargetListView.Items.Add Do //neues Item
  Begin
    Caption := SrcListItem.Caption; //übertrage Caption
    For i := 0 to pred(SrcListItem.SubItems.Count) Do //Kopiere alle SubItems
      SubItems.Add(SrcListItem.SubItems[i]);
  End;

End;

Albi 5. Mär 2004 05:46

Re: Zeile von ListView1 in ListView2 "Kopieren"
 
Ja, das hatte ich mal aber ich will ja die PLz mit darstellten und diese steht in table ja nur als Id. Somit müßte ich diese ja ertmal Filtern und das kam dabei raus. Wenn Du einenVorschlag hast, wie es trotz alle dem dynamischer gestalten kann, immer her damit. Ich lerne immer gerne was neues.

Albi 5. Mär 2004 05:52

Re: Zeile von ListView1 in ListView2 "Kopieren"
 
Super :P , funzt so wie es haben wollte.


Danke

Robert_G 5. Mär 2004 08:32

Re: Zeile von ListView1 in ListView2 "Kopieren"
 
Den Code zur Darstellung von DB-Inhalten würde ich immer unabhängig von der Tabellenstruktur schreiben.
Wenn du willst, dass ID als PLZ erscheint, kannst du in deiner Abfrage ein Spaltenalias für ID benutzen.
Beispiel:
SQL-Code:
SELECT ID As PLZ -- Diese Spalte wird als PLZ ausgegeben
      ,Adresse
      ,Name
      ,Vorname
FROM  DeineTabelle

Albi 9. Mär 2004 13:00

Re: Zeile von ListView1 in ListView2 "Kopieren"
 
Zitat:

Zitat von Robert_G
Den Code zur Darstellung von DB-Inhalten würde ich immer unabhängig von der Tabellenstruktur schreiben.
Wenn du willst, dass ID als PLZ erscheint, kannst du in deiner Abfrage ein Spaltenalias für ID benutzen.
Beispiel:
SQL-Code:
SELECT ID As PLZ -- Diese Spalte wird als PLZ ausgegeben
      ,Adresse
      ,Name
      ,Vorname
FROM  DeineTabelle

Robert_G, das ist wohl richtig aber somit hätte ich diesem Fall nicht PLZ sondern nur die ID der PLZ, da diese in einer anderen DB liegen. Also muß ich zuvor diese PLZ erst einmal heraus suchen bevor ich sie eintrage.

Robert_G 9. Mär 2004 13:16

Re: Zeile von ListView1 in ListView2 "Kopieren"
 
Dann eben so: :wink:
SQL-Code:
SELECT PLZ
      ,Adresse
      ,Name
      ,Vorname
FROM  DeineTabelle  Tab,
       DeinPLZTabelle PLZ
WHERE PLZ.ID = Tab.ID

Albi 10. Mär 2004 18:30

Re: Zeile von ListView1 in ListView2 "Kopieren"
 
Vielen Dank, darauf bin ich gar nicht gekommen es so zu machen, das ist ja viel leichter.

Vielen Dank.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz