Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

XE3 und LiveBindings

  Alt 18. Sep 2012, 10:00
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 - 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.

Ä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

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!)
Angehängte Dateien
Dateityp: zip LiveBindingFMX.zip (3,64 MB, 19x aufgerufen)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (18. Sep 2012 um 10:02 Uhr)
  Mit Zitat antworten Zitat