Wednesday, April 1, 2009

.NET databinding in Delphi for Win32

Databinding is defined as: “General technique that binds two data/information sources together and maintains them in sync. This is usually done with two data/information sources with different types as in XML data binding. However in UI data binding, we bind data and information objects of the same type together (e.g. Java objects to Java UI elements).”


Databinding is common technique in VCL. Since Delphi 1 we have TDataset class for bind data and UI controls (DB Aware) in a GUI application.


In .NET world, instead, databinding is very different.


So, I’m starting to write (actually for fun) a DataBinder component to use .NET “like” databinding (or something similar to) in Delphi for Win32 too.


All the code has been written in about 2 hours.


TDataBinder


With this component you can “bind” an object property to another object property in a declarative mode.


e.g.

  1. DataBinder.Add(Person, 'FirstName', Edit1, 'Text');



and then, every update to Person.FirstName property, will be reflected in the Edit1.Text property.


You can bind different control properties to different BO properties.


e.g.

  1. //Text = FirstName
  2. DataBinder.Add(Person, 'FirstName', Edit1, 'Text');?/div>
  3. //If Person is not married, TEdit become flat
  4. DataBinder.Add(Person, 'IsMarried', Edit1, 'Ctl3D');?/div>


So in your initialization code (e.g. FormCreate) you can write somethig similat to following:

  1. procedure TForm3.FormCreate(Sender: TObject);
  2. var
  3. binder: TDataBinder;
  4. begin
  5. //Create your "BO"
  6. Person := TPerson.Create;
  7. //read data from "database"
  8. Person.Load;
  9. //Setup databinding…
  10. binder := TDataBinder.Create(self);
  11. binder.Add(Person, 'FirstName' , Edit1, 'Text');
  12. binder.Add(Person, 'LastName', Edit2, 'Text');
  13. //The same attribute binded to 3 controls
  14. binder.Add(Person, 'Married', CheckBox1, 'Checked');
  15. binder.Add(Person, 'Married' , Edit1,'Ctl3D');
  16. binder.Add(Person, 'Married',Edit2, 'Ctl3D');
  17. //The same attribute binded to 2 controls
  18. binder.Add(Person, 'SomeInteger', ComboBox1, 'ItemIndex');
  19. binder.Add(Person, 'SomeInteger', TrackBar1, 'Position');
  20. //A derived property
  21. binder.Add(Person, 'FullName', Panel1, 'Caption');
  22. //let start…
  23. binder.Bind;
  24. end;



Other info asap so, stay tuned.

Download Code and compiled sample

(Source code require Delphi 2009)

No comments: