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