![]() |
Delphi-Version: 10 Seattle
LiveBindings, Verwendung u.a. von TListBindSourceAdapter
Liste der Anhänge anzeigen (Anzahl: 1)
Hallöle...:P
Ich mache meine ersten Schritte mit LiveBindings... bitte seid nett. :P Was ich vorhabe: Meine Anwendung hat als Datenhaltung reichlich generische Listen die von der DB gefüllt werden. Um die Schreibarbeit mit der Anbindung der Objekte übersichtlicher zu gestalten wollte ich mit LiveBindings arbeiten. Dazu habe ich mir ein Testprojekt erstellt. Nach ein wenig lesen habe ich die Liste in die ListView bekommen. *schwitz* Nur eine Sache kiege ich nicht hin: 1. Nur wenn ich die lokal deklarierte Liste ausschließlich im CreateAdaper erzeuge und ausfülle sind die Daten sichtbar. :gruebel: 2. Wenn ich die gefüllte Liste von außen, z.B. im constructor, übergebe ist die ListView leer. :gruebel: Wo liegt der Denkfehler? :? Testcode:
Delphi-Quellcode:
unit Unit2;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, System.Generics.Collections, System.Generics.Defaults, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Data.Bind.Components, Data.Bind.ObjectScope, Data.Bind.GenData, Data.Bind.EngExt, Vcl.Bind.DBEngExt, System.Rtti, System.Bindings.Outputs, Vcl.Bind.Editors, Vcl.ComCtrls; type TBlubb = class private FID: Integer; FDatum: TDateTime; FText: string; FCheck: Boolean; public property ID: Integer read FID write FID; property Text: string read FText write FText; property Datum: TDateTime read FDatum write FDatum; property Check: Boolean read FCheck write FCheck; end; TForm2 = class(TForm) edt1: TEdit; lbl1: TLabel; chk1: TCheckBox; binadp1: TAdapterBindSource; lv1: TListView; bndlst1: TBindingsList; genadp1: TDataGeneratorAdapter; linproCaption: TLinkPropertyToField; lnkcon1: TLinkControlToField; lincon1: TLinkFillControlToField; linproChecked: TLinkPropertyToField; procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); procedure binadp1CreateAdapter(Sender: TObject; var ABindSourceAdapter: TBindSourceAdapter); private FList: TObjectList<TBlubb>; FBlubb: TBlubb; public end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.binadp1CreateAdapter(Sender: TObject; var ABindSourceAdapter: TBindSourceAdapter); begin FList := TObjectList<TBlubb>.Create(True); // mußte hierher verschoben werden weil FormCreate nach dem CreateAdapter gefeuert wird. Sonst ist die Instanz nil. FBlubb := TBlubb.Create; FBlubb.ID := 100; FBlubb.Text := 'BLA'; FBlubb.Datum := Now; FBlubb.Check := True; FList.Add(FBlubb); ABindSourceAdapter := TListBindSourceAdapter<TBlubb>.Create(self, FList); end; procedure TForm2.FormCreate(Sender: TObject); begin // FBlubb := TBlubb.Create; // FBlubb.ID := 100; // FBlubb.Text := 'BLA'; // FBlubb.Datum := Now; // FBlubb.Check := True; // // FList.Add(FBlubb); end; procedure TForm2.FormDestroy(Sender: TObject); begin FList.Free; end; end. |
AW: LiveBindings, Verwendung u.a. von TListBindSourceAdapter
Moin...:P
Bitte seid nachsichtig mit mir... Ich komme einfach nicht weiter. :? Nach diversen Tests bin ich der Überzeugung das im CreateAdapter nur die Liste mit seinem derzeitigen Inhalt angezeigt wird. Ein Hinzufügen eines Objektes zu der Liste hat keinerlei Auswirkungen "optische" Auswirkungen. :? Das bedeutet, das der Inhalt der Liste nicht mit der Anzeige übereinstimmt. :? Hat wirklich keiner jemals eine externe Liste an die LiveBindings gehängt? :? Was übersehe ich hier? Ist das vieleicht ein Bug? Danke... Nachtrag: Ist kein Bug. :P Das Geheimnis ist das Umgehens mit den "AOwnsObjects". 8-)
Delphi-Quellcode:
constructor TForm1.Create(AOwner: TComponent);
begin FList := TObjectList<TBlubb>.Create(True); // die Listeninstanz mit "True" = am Ende alles abräumen FBlubb := TBlubb.Create; FBlubb.ID := 100; FBlubb.Text := 'BLA'; FBlubb.Datum := Now; FBlubb.Check := True; FList.Add(FBlubb); inherited; // erst die Listen Instanz und danach das BlubbCreateAdapter end; . . procedure TForm1.BindSourceAdapter1CreateAdapter(Sender: TObject; var ABindSourceAdapter: TBindSourceAdapter); begin ABindSourceAdapter := TListBindSourceAdapter<TBlubb>.Create(self, FList, False); // nicht die Listenobjekte freigeben end; . . procedure TForm1.btn1Click(Sender: TObject); begin FBlubb := TBlubb.Create; // 1 Objekt hinzufügen FBlubb.ID := 111; FBlubb.Text := 'BLUBB'; FBlubb.Datum := Now + 30; FBlubb.Check := False; FList.Add(FBlubb); TListBindSourceAdapter<TBlubb>(binpro1.InternalAdapter).SetList(FList, False); // aktuelle Liste zuweisen, OwnsObjects = False, ! mit der Zuweisung wird die Liste nicht geleert. BindSourceAdapter1.Active := True; // wieder aktivieren end; |
AW: LiveBindings, Verwendung u.a. von TListBindSourceAdapter
Das
![]() Es geht zwar nicht genau um deine Liste, aber vielleicht hilft es dir ja trotzdem weiter. Rollo |
AW: LiveBindings, Verwendung u.a. von TListBindSourceAdapter
Moin...:P
Danke. Die kenne ich alle schon...:P Inzwischen hat sich das mit den LiveBindings erledigt. Ich bin über neue Probleme gestolpert die ich nicht hinbekomme...:? Wenn jemand eine Lösung wüßte wie ich das eigentliche Objekt, ohne zusätzlichen Code, als DATA an das ListviewItem hängen kann... höre ich zu. 8-) Im Nachhinein geht das schon mit der Liste durchlaufen und die Items aktualisieren... dann kann ich es gleich klassisch machen. :? |
AW: LiveBindings, Verwendung u.a. von TListBindSourceAdapter
Hilft
![]() Könnte vielleicht sogar mit Spring4D zusammenarbeiten. Wahrscheinlich muss man aber noch etwas mehr basteln. Rollo |
AW: LiveBindings, Verwendung u.a. von TListBindSourceAdapter
Moin...:P
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:26 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