Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   XE3 und LiveBindings (https://www.delphipraxis.net/170456-xe3-und-livebindings.html)

Sir Rufo 18. Sep 2012 10:00


XE3 und LiveBindings
 
Liste der Anhänge anzeigen (Anzahl: 1)
Nach diesem Beitrag LiveBindings in XE3: TAdapterBindSource and binding to Objects von Malcolm Grove dachte ich mir wäre es wohl mal an der Zeit XE3 auszuprobieren.

Und schon fasst man mit beiden Händen in die Keramik:

DataGeneratorAdapter-FeldEditor-Feld hinzufügen:

Feldname eintippen, Felddaten auswählen - :shock: wieso verändert sich denn jetzt der Feldname wieder
na gut, legen wir mal für das Beispiel die Felder
Code:
Lastname - ftString
Firstname - ftString
Age - ftInteger
an.

Der Code sieht nun so aus (nachdem ich alle Bugs und Fehler aus dem Beispielcode von Malcolm entfernt habe):
Delphi-Quellcode:
unit ViewMain;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Rtti, System.Classes,
  System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs,
  Data.Bind.GenData, Data.Bind.EngExt, FMX.Bind.DBEngExt, FMX.Bind.Grid,
  System.Bindings.Outputs, FMX.Bind.Editors, Data.Bind.Components,
  Data.Bind.Grid, FMX.Layouts, FMX.Grid, Data.Bind.ObjectScope,
  Generics.Collections;

type
  TPerson = class
  private
    FFirstname: string;
    FLastname: string;
    FAge: Integer;
  public
    constructor Create(const Firstname, Lastname: string; Age: Integer);
  published
    property Firstname: string read FFirstname write FFirstname;
    property Lastname: string read FLastname write FLastname;
    property Age: Integer read FAge write FAge;
  end;

  TForm1 = class(TForm)
    AdapterBindSource1: TAdapterBindSource;
    DataGeneratorAdapter1: TDataGeneratorAdapter;
    Grid1: TGrid;
    BindingsList1: TBindingsList;
    LinkGridToDataSource1: TLinkGridToDataSource;
    procedure AdapterBindSource1CreateAdapter(Sender: TObject;
      var ABindSourceAdapter: TBindSourceAdapter);
  private
    MyPeople: TList<TPerson>; // TObjectList
  public

  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}
{ TPerson }

constructor TPerson.Create(const Firstname, Lastname: string; Age: Integer);
begin
  FFirstname := Firstname;
  FLastname := Lastname;
  FAge := Age;
end;

procedure TForm1.AdapterBindSource1CreateAdapter(Sender: TObject;
  var ABindSourceAdapter: TBindSourceAdapter);
begin
  MyPeople := TObjectList<TPerson>.Create; // TObjectList.Create

  MyPeople.Add(TPerson.Create('Fred', 'Flintstone', 40));
  MyPeople.Add(TPerson.Create('Wilma', 'Flintstone', 41));
  MyPeople.Add(TPerson.Create('Barney', 'Rubble', 40));
  MyPeople.Add(TPerson.Create('Betty', 'Rubble', 39));

  // ABindSourceAdapter := TListBindSourceAdapter.Create
  // (Self, MyPeople, True);
 
  ABindSourceAdapter := TListBindSourceAdapter<TPerson>.Create
    (AdapterBindSource1, MyPeople, True);
end;

end.
Sieht auf jeden Fall schon mal gut aus, oder doch nicht?

Die Reihenfolge der Felder, die ich im Delphi-Referenz durchsuchenTDataGeneratorAdapter eingegeben habe interessiert wohl niemanden, denn die Spalten werden in der Reihenfolge angezeigt, wie diese in der Klasse definiert wurden. :roll:

Ändert man in dem Grid einen Eintrag und wechselt mit den Cursortasten in die nächste oder vorherige Zeile, dann wird dieser geänderte Wert in alle Zeilen angezeigt :shock:

Wer soll das denn so benutzen?
(wahrscheinlich keiner - selbst bei emba wissen die anscheinend nicht, wie man das benutzt)

Im Anhang der Source und die Exe (10MB - Release!)

greenmile 18. Sep 2012 10:04

AW: XE3 und LiveBindings
 
Ja, wenn ich mal einen Job suche bei dem ich kaum was zu tun habe, bewerbe ich mich bei EMBA in der Qualitätskontrolle.
Ich finde es wirklich sehr inovativ was die Herren da zaubern, aber wieso ist es jedesmal nur zu 80% fertig?

Lemmy 18. Sep 2012 19:52

AW: XE3 und LiveBindings
 
So, habe mir das Beispiel mal angeschaut. Der Fehler ließ sich auch nachvollziehen, nach einer Änderung in einer Cell wurde die komplette SPalte geändert, nach einem Scroll auf eine andere Zeile wurde das Grid aber korrekt dargestellt.

Das Beispiel habe ich dann in VCL nachgebaut - kein Fehler

Dann habe ich das TMS Grid aus dem PlusPacket installiert und das Beispiel geändert, auch dort kein Fehler. Insofern liegt das Problem wohl am TGrid von FMX2 und nicht am LiveBinding.

Grüße

Uwe Raabe 18. Sep 2012 21:46

AW: XE3 und LiveBindings
 
Zitat:

Zitat von Lemmy (Beitrag 1183485)
So, habe mir das Beispiel mal angeschaut. Der Fehler ließ sich auch nachvollziehen, nach einer Änderung in einer Cell wurde die komplette SPalte geändert, nach einem Scroll auf eine andere Zeile wurde das Grid aber korrekt dargestellt.

Das Beispiel habe ich dann in VCL nachgebaut - kein Fehler

Dann habe ich das TMS Grid aus dem PlusPacket installiert und das Beispiel geändert, auch dort kein Fehler. Insofern liegt das Problem wohl am TGrid von FMX2 und nicht am LiveBinding.

Sehr schön:thumb:

Kannst du das bitte im QC eintragen? Wenn du dir schon die Mühe gemacht hast, diese drei Szenarien zusammenzubauen, wäre es doch Verschwendung, wenn man das einfach so auf sich beruhen ließe.

Vielleicht wird dann der Fehler im Update 1 schon behoben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:01 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