Müsstest du nicht nach LoadFromDB usw. auch wieder FuelleListView aufrufen. Irgendwie bin ich mir nicht sicher ob CustomerList und ListView immer sauber synchron sind. Ausserdem verstehe ich nicht, warum du die Cutomerlist einmal in der Connect-Funktion von außen füllst und dann wieder mit der LoadFromDB-Methode von innern füllst, da reicht doch eine Version.
Dann hast du öfter solche Konstrukte:
Delphi-Quellcode:
if lvCustomer.Selected<>nil then
begin
//Über den Index kann man nun auf jedes Object in der ObjektListe zugreifen
//Damit bestücken wir das Formular mit den Werten aus den Eigenschaften des Objects
frmCustomer.edtKDNR.Text:=inttostr(CustomerList[lvCustomer.Selected.Index].KDNR);
frmCustomer.edtName.Text:=CustomerList[lvCustomer.Selected.Index].Name;
frmCustomer.edtVorname.Text:=CustomerList[lvCustomer.Selected.Index].Vorname;
//...
if FRMCustomer.ShowModal=mrOK then
begin
//Object erzeugen nicht nötig, da es bereits besteht. Zugriff also möglich
//für die Übertragung der Daten aus dem Formular
CustomerList[lvCustomer.Selected.Index].KDNR:=strtoint(frmCustomer.edtKDNR.Text);
CustomerList[lvCustomer.Selected.Index].Name:=frmCustomer.edtName.Text;
//...
Das wäre mir alles viel zu lang zum lesen, da würde ich mit Hilfsvariablen arbeiten und dem frmCustomer ein paar Propertys spendieren, die das füllen der ganzen TEdits intern erledigen:
Delphi-Quellcode:
var index:integer;
customer:TCustomer;
begin
if lvCustomer.Selected<>nil then
begin
index:=lvCustomer.Selected.Index;
customer:=CustomerList[index];
frmCustomer.KDNR:=customer.KDNR;
frmCustomer.Nachname:=Customer.Name;
frmCustomer.Vorname:=Customer.Vorname;
//...
if FRMCustomer.ShowModal=mrOK then
begin
//Object erzeugen nicht nötig, da es bereits besteht. Zugriff also möglich
//für die Übertragung der Daten aus dem Formular
Customer.KDNR:=frmCustomer.KDNR;
Customer.Name:=frmCustomer.Nachname;
//...
Läßt sich viel schöner lesen, denke ich. Alternativ könnte man dem frmCustomer auch einfach einen kompletten TCustomer übergeben und der regelt dann alles intern selbst, dann säh das nur noch so aus (man müsste dann aber das frmCustomer aufwendiger gestalten:
Delphi-Quellcode:
var index:integer;
begin
if lvCustomer.Selected<>nil then
begin
index:=lvCustomer.Selected.Index;
frmCustomer.customer:=CustomerList[index];
if FRMCustomer.ShowModal=mrOK then
FuelleListView;
end;
end;