AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Auf Änderungen in einer TObjectList<T> reagieren
Thema durchsuchen
Ansicht
Themen-Optionen

Auf Änderungen in einer TObjectList<T> reagieren

Ein Thema von RWarnecke · begonnen am 19. Jun 2011 · letzter Beitrag vom 25. Jun 2011
 
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#3

AW: Auf Änderungen in einer TObjectList<T> reagieren

  Alt 19. Jun 2011, 13:21
1.) Ist das soweit schon mal richtig oder gibt es da noch Verbesserungen ? Wenn ja, was kann man im allgemeinen verbessern und auch in Bezug auf mehrere TObjectList<TKlassenname>.Create's ?
Du solltest einen neuen Typ TZahlungsartList = TObjectList<TZahlungsart>; deklarieren.
In wie weit soll mir das helfen ?

2.) Wie realisiere ich es, dass das OnChange-Event bei neuen Datensätzen ausgelöst wird ?
Überschreibe in TZahlungsartList die Methode Notify, dann kannst du auf die verschiedenen Ereignisse reagieren. Das gilt übrigens auch für den nicht-generischen Ansatz.
Das heißt also ich kann die TObjectList<TZahlungsart> genauso behandeln wie eine nicht generische ObjectList ?

3.) In meiner alten Konstelation hatte ich noch eine extra Procedure für das Löschen eines Datensatzes, wie mache ich das hier in diesem Beispiel ?
Wie hast du es bisher gemacht?
Ich habe das bis jetzt folgendermaßen gemacht :
Delphi-Quellcode:
  TZahlungsartObjListe = class(TObjectList)
  private
    FOnChange : TZahlungsartListeAddEvent;
    FModifyAction : TModifyActionList;
    FNewRecord : Boolean;
    procedure DeleteRecord(Klasse: TZahlungsart);
  protected
    function getItem(Index: Integer): TZahlungsart; virtual;
    procedure setItem(Index: Integer; Objekt: TZahlungsart); virtual;
    procedure Notify(Ptr: Pointer; Action: TListNotification); override;
  public
    function Add(Objekt: TZahlungsart): Integer; virtual;
    function NewRecord(Objekt: TZahlungsart): Integer; virtual;
    function Remove(Objekt: TZahlungsart): Integer; virtual;
    function IndexOf(Objekt: TZahlungsart): Integer; virtual;
    procedure Insert(Index: Integer; Objekt: TZahlungsart); virtual;
    property Items[index: Integer]: TZahlungsart read getItem write setItem; default;
    property ModifyAction : TModifyActionList read FModifyAction write FModifyAction;
    property OnChange: TZahlungsartListeAddEvent read FOnChange write FOnChange;
  end;

{ TZahlungsartObjListe }

function TZahlungsartObjListe.Add(Objekt: TZahlungsart): Integer;
begin
  FNewRecord := False;
  Result := inherited Add(Objekt);
end;

procedure TZahlungsartObjListe.DeleteRecord(Klasse: TZahlungsart);
begin
  with DM_Main.UniQuery_Zahlungsart do
  begin
    SQL.Text := 'DELETE FROM Zahlungsarten WHERE ID = :ID AND Zahlungsart = :Zahlungsart;';
    ParamByName('ID').AsInteger := Klasse.FID;
    ParamByName('Zahlungsart').AsString := Klasse.FZahlungsart;
    Execute;
  end;
end;

function TZahlungsartObjListe.getItem(Index: Integer): TZahlungsart;
begin
  Result := TZahlungsart(inherited Items[Index]);
end;

function TZahlungsartObjListe.IndexOf(Objekt: TZahlungsart): Integer;
begin
  Result := inherited IndexOf(Objekt);
end;

procedure TZahlungsartObjListe.Insert(Index: Integer;
  Objekt: TZahlungsart);
begin
  inherited Insert(Index, Objekt);
end;

function TZahlungsartObjListe.NewRecord(Objekt: TZahlungsart): Integer;
begin
  FNewRecord := True;
  Result := inherited Add(Objekt);
end;

procedure TZahlungsartObjListe.Notify(Ptr: Pointer; Action: TListNotification);
begin
  if (Assigned(FOnChange)) and (FNewRecord) and (Action <> lnDeleted) then
  begin
    FNewRecord := False;
    FOnChange(Self, TZahlungsart(Ptr));
  end;
  if (FModifyAction = lnDelete) then
  begin
    DeleteRecord(TZahlungsart(Ptr));
  end;
  inherited Notify(Ptr, Action);
end;

function TZahlungsartObjListe.Remove(Objekt: TZahlungsart): Integer;
begin
  Result := inherited Remove(Objekt);
end;

procedure TZahlungsartObjListe.setItem(Index: Integer;
  Objekt: TZahlungsart);
begin
  inherited Items[Index] := Objekt;
end;
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz