Thema: Delphi ListView - Text auslesen

Einzelnen Beitrag anzeigen

Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.300 Beiträge
 
Delphi 12 Athens
 
#20

AW: ListView - Text auslesen

  Alt 29. Sep 2017, 07:41
Moin...
Zitat:
Ich denke für einen Anfänger ist das Auslesen aus dem Control erst einmal alles was er braucht.
Das denke ich nicht. Ich hätte manche Fehler damals nicht gemacht, wenn ich die DP schon gehabt hätte und mir jemand gezeigt hätte wie man es "richtig" (Da gibt es 1000 Varianten ) macht. Klar muß man sich auf den Kenntnisstand einstellen, aber die visuellen Komponenten als Datenablage zu mißbrauchen rächt sich später. Was kostet es mehr es gleich richtig zu machen... Erst recht als Einsteiger sollte man DRY und KISS schon gehört haben.

...zum Thema:
Beispiel mit Objekten:
Delphi-Quellcode:
// das Datenobjekt (ähnlich wie der Datensatz im Dataset)
  TCustomer = class
  strict private
    FName: string;
    FTown: string;
    FFirstName: string;
  public
    constructor Create;
    destructor Destroy; override;
    property Name: string read FName write FName;
    property FirstName: string read FFirstName write FFirstName;
    property Town: string read FTown write FTown;
  end;
...
// die Liste (ähnlich wie TDataSet)
  TCustomerList = TObjectList<TCustomer>; // generische Liste
...
//Implementierung
procedure TfoMain.ShowCustomerList(List: TCustomerList);
var
  Item: TListItem;
  Customer: TCustomer;
begin
  lvCustomers.Items.Clear;
  for Customer in List do
  begin
    Item:= lvCustomers.Items.Add;
    Item.Data:= Customer; // Das komplette Objekt (Pointer) hängt an dem Eintrag
    Item.SubItems.Add(Customer.Name);
    Item.SubItems.Add(Customer.FirstName);
    Item.SubItems.Add(Customer.Town);
    Item.ImageIndex:= 99; // der Index des Images aus der Imagelist der Listview
  end;
  lvCustomers.Items.Item[0].Selected := True; // ersten Eintrag markieren...oder so
end;
Werte auslesen:
Delphi-Quellcode:
var
  Customer: TCustomer;
  Town: string
...
Customer := TCustomer(lvCustomer.Data); // über die Zwischenvariable ist der Quelltext dann besser lesbar :-)
Town := Customer.Town; // nicht aus dem ListView lesen sondern aus der Liste über den Pointer (automatisch)
Beispiel mit Dataset:
Delphi-Quellcode:
// das TDataSet
* auf dem Datenmodul als Komponente
...
//Implementierung
procedure TfoMain.ShowCustomerList(DataSet: TDataSet);
var
  I: Integer;
  Item: TListItem;
begin
  lvCustomers.Items.Clear;
  DataSet.First;
  while not DataSet.Eof do
  begin
    Item:= lvCustomers.Items.Add;
    Item.Data:= TObjekt(Dataset.FieldByName('ID').AsInteger); // Der PK (PrimaryKey) hängt an dem Eintrag
    Item.SubItems.Add(Dataset.FieldByName('NAME').AsString);
    Item.SubItems.Add(Dataset.FieldByName('FIRSTNAME').AsString);
    Item.SubItems.Add(Dataset.FieldByName('TOWN').AsString);
    Item.ImageIndex:= 99; // der Index des Images aus der Imagelist der Listview
    DataSet.Next;
  end;
  lvCustomers.Items.Item[0].Selected := True; // ersten Eintrag markieren...oder so
end;
Werte auslesen:
Delphi-Quellcode:
var
  Town: string
...
DataSet.Locate('ID', Integer(lvCustomer.Data),[]); // positionieren des DataSets auf den Datensatz mit dem richtigem PK
Town := DataSet.FieldByName('TOWN').AsSting; // nicht aus dem ListView lesen sondern aus dem DataSet
  Mit Zitat antworten Zitat