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 2 Listviews per Drag ´n Drop füllen (https://www.delphipraxis.net/83099-2-listviews-per-drag-%B4n-drop-fuellen.html)

needatip 27. Dez 2006 14:05


2 Listviews per Drag ´n Drop füllen
 
Hallo,
ich habe 2 Listviews, die ich mit dem Inhalt von Datenbankfeldern fülle.
Anschließend möchte ich mittels Drag `n Drop die Felder aus der ListView1 in die SubItems der ListView2 ziehen.
Ich brauche das für einen Dateiimport und der manuellen Zuordnung von Feldern (Fieldmapping).

ListView1 hat eine Spalte mit den Feldern der Tabelle Import.
ListView2 hat zwei Spalten mit den bereits vorhandenen Feldern und eines für die Zuordnung.
Jetzt möchte ich die Feldnamen aus der ListView1 in die ListView2 ziehen.
Diese sollen dann als Subitems hinter die selektierten Werte in ListView2 als Subitems erscheinen.
Zuletzt möchte ich dann die ListView2 (Spalte 1 und Spalte2) auslesen und daraus eine SQL Funktion basteln.

so in etwa soll das Ergebnis aussehen!

LISTVIEW1
FELDER
------
NAME
STRASSE
PLZ
ORT


LISTVIEW2
FELDER......ZUORDNUNG
---------------------
NR
FIRMA
NAME1.......NAME
NAME2
STRASSE.....STRASSE
LAND
PLZ.........PLZ
ORT.........ORT


Ebenso soll es die Möglichkeit geben, die Zuordnung der Felder zu löschen.
das habe ich mir so gedacht:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
  for i := 0 to ListView2.Items.Count -1 do
    ListView2.Items.Item[i].SubItems.Clear;
    ListView2.Refresh;
end;
Wer kann mir bei dieser Aufgabenstellung behilflich sein?

needatip 28. Dez 2006 07:29

Re: 2 Listviews per Drag ´n Drop füllen
 
Bin jetzt schon ein Stück weiter.
Das mit der Zuordnung der einzelnen Felder habe ich so gelöst.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  ListView1.DragMode := dmAutomatic;
end;

procedure TForm1.ListView2DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := Source is TListView;
end;

procedure TForm1.ListView2DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  with ListView2 do
  begin
    begin
      if DropTarget = nil then Exit;
      Selected := DropTarget;
      Items.Item[Selected.Index].SubItems.Clear;
      Items.Item[Selected.Index].SubItems.Add(ListView1.Selected.Caption);
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
  for i := 0 to ListView2.Items.Count - 1 do
    ListView2.Items.Item[i].SubItems.Clear;
  ListView2.Refresh;
end;
Jetzt muss ich nur noch die SQL-Anweisung zusammenbasteln.
Dazu brauch ich die Einträge von der ListView2, bei denen alle zwei Spalten belegt sind.
Die SQL Anweisung sollte so aussehen:
SQL-Code:
UPDATE MyTable
SET Bez = I.Bez, Typ = I.Typ, Data = I.Data
FROM MyTable AS L RIGHT OUTER JOIN
                      Import AS I ON L.Nr = I.Nr
wobei Bez,Typ,Data die Werte aus der 1. Spalte der Listview2 und I.Bez,I.Typ,I.Data die Werte aus der 2. Spalte der ListView2 darstellen.
Wie kann ich die ListView2-Einträge auslesen, bei denen auch ein SubItem-Eintrag vorhanden ist?

marabu 28. Dez 2006 10:04

Re: 2 Listviews per Drag ´n Drop füllen
 
Hi,

ob in der zweiten Spalte deines Items ein Wert eingetragen ist, kannst du so feststellen:

Delphi-Quellcode:
var
  li: TListItem;
begin
  // ...
  if (li.SubItems.Count > 1) and (SubItems[1] <> '') then
  begin
    // ... Wert vorhanden
  end;
end;
Freundliche Grüße


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