AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi LiveBindings, Verwendung u.a. von TListBindSourceAdapter
Thema durchsuchen
Ansicht
Themen-Optionen

LiveBindings, Verwendung u.a. von TListBindSourceAdapter

Ein Thema von haentschman · begonnen am 29. Okt 2016 · letzter Beitrag vom 1. Nov 2016
Antwort Antwort
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.289 Beiträge
 
Delphi 12 Athens
 
#1

LiveBindings, Verwendung u.a. von TListBindSourceAdapter

  Alt 29. Okt 2016, 14:04
Delphi-Version: 10 Seattle
Hallöle...

Ich mache meine ersten Schritte mit LiveBindings... bitte seid nett.

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.
2. Wenn ich die gefüllte Liste von außen, z.B. im constructor, übergebe ist die ListView leer.

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.
Miniaturansicht angehängter Grafiken
test.png  

Geändert von haentschman (29. Okt 2016 um 14:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.289 Beiträge
 
Delphi 12 Athens
 
#2

AW: LiveBindings, Verwendung u.a. von TListBindSourceAdapter

  Alt 30. Okt 2016, 07:17
Moin...

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. Das Geheimnis ist das Umgehens mit den "AOwnsObjects".
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;

Geändert von haentschman (30. Okt 2016 um 12:03 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.901 Beiträge
 
Delphi 12 Athens
 
#3

AW: LiveBindings, Verwendung u.a. von TListBindSourceAdapter

  Alt 31. Okt 2016, 18:18
Das hier kennst du ?

Es geht zwar nicht genau um deine Liste, aber vielleicht hilft es dir ja trotzdem weiter.

Rollo
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.289 Beiträge
 
Delphi 12 Athens
 
#4

AW: LiveBindings, Verwendung u.a. von TListBindSourceAdapter

  Alt 1. Nov 2016, 06:01
Moin...

Danke. Die kenne ich alle schon...
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. Im Nachhinein geht das schon mit der Liste durchlaufen und die Items aktualisieren... dann kann ich es gleich klassisch machen.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.901 Beiträge
 
Delphi 12 Athens
 
#5

AW: LiveBindings, Verwendung u.a. von TListBindSourceAdapter

  Alt 1. Nov 2016, 07:36
Hilft das als Vorlage weiter ?
Könnte vielleicht sogar mit Spring4D zusammenarbeiten.

Wahrscheinlich muss man aber noch etwas mehr basteln.

Rollo
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.289 Beiträge
 
Delphi 12 Athens
 
#6

AW: LiveBindings, Verwendung u.a. von TListBindSourceAdapter

  Alt 1. Nov 2016, 08:00
Moin...
Zitat:
Wahrscheinlich muss man aber noch etwas mehr basteln.
...ich streube mich nicht neue Sachen auszuprobieren. Wenn aber das Verbinden eines Edits mit dem ausgewählten Objekt in der Liste den klassischen Aufwand übersteigt dann bin ich raus. Ich habe nicht die Zeit das Projekt (ca. 40000 Zeilen) komplett zu überarbeiten und zu basteln... Sorry...
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz