Mach's dir doch nicht so schwer.
Definiert doch einfach in TCustomer die Funkton
Delphi-Quellcode:
RemoveFromDB(con: TZConnection); //Kannst die auch DeleteFromDB() nennen, oder auch HansWurst(), ist völlig egal.
var
q: TZQuery;
begin
q:=TZQuery.Create(nil);
try
q.sql.Text:='Delete from Customer where id=:id';
q.params.parseSQL(q.sql.text, True);
q.params.paramvalue['id']:=self.id;
q.execSQL;
finally
q.free;
end;
end;
Diese Funktion löscht den Datensatz mit der id aus der
DB.
Und unter dem Button "Löschen" schreibst du jetzt einfach:
Delphi-Quellcode:
begin
if ListView.Selected<>Nil then
begin
CustomerList[ListView.Selected.Index].RemoveFromDB(DBConnection);
Customerlist[ListView.Selected.Index].Free;
CustomerList.Delete(ListView.Selected.Index);
ListView.Items.Delete(ListView.Selected.Index);
end;
end;
(Das hab ich jetzt mal aus dem Kopf hier geschrieben. Kann sein, dass ich die Variablen nicht ganz korrekt benannt habe, ist halt ohne Codervervollständigung)
Zur Erklährung:
Als erstes sagst du dem Object in CustomerList, dass es sich selbst aus der
DB löschen soll.
Danach gibt's du das Object Frei, weil du es ja nicht mehr brauchst (Laut Hilfe würde nämlich TObjectList.Delete nur den Eintrag löschen, nicht aber das Object selbst freigeben).
Anschließend wird eben mit CustomerList.Delete(...) eben der Eintrag aus der ObjectListe entfernt.
Und damit der Index der nachfolgenden ListView-Einträge wieder passt, wird auch die Zeile in der ListView gelöscht, somit ersparst du dir das neuladen über FuelleListView, was ja sehr lange dauert.
Die Hilfe dazu findest du, in dem im Sourcecode der Klasse auf dem Wort "TObjectList" den Cursor setzt und einfach mal F1 drückst. Dann
Dannach wählst du einen der beiden Einträge aus, entweder "System.Generics.Collections.TObjectList" oder "System.Contnrs.TObjectList". Welchen ist egal.
Dann findest du oben einen Link zu den Methoden. Und dort auch die Hilfe zu Delete.
Dort steht dann unter anderem:
Hinweis: Der für das Element reservierte Speicherplatz wird von Delete nicht freigegen.
Deswegen habe ich noch das Customerlist[ListView.Selected.Index].Free; mit eingebaut. Man könnte auch die Methode Notify der TObjectList aufrufen, so wie es in der Hilfe steht.
Möglicherweise könnte man das mit TObjectList.Remove() erledigen, denn da wird (glaube ich) das Object automatisch mit freigegeben. Probier es einfach mal aus.