初識kbmmw 中的smartbind功能

 

 

 

關於kbmmw smartbind 的開發緣由及思路,你們能夠參見官方的博客說明和紅魚兒的翻譯html

今天我就實例操做一下,給你們演示一下具體實現。數據庫

咱們新建一個工程api

放幾個基本的控件spa

 

在單元裏面加上引用 kbmMWSmartBind。翻譯

添加事件代碼3d

procedure TForm1.Button1Click(Sender: TObject);
begin
     Binding.Clear;
     Binding.Bind(Edit1,'Text',Label1,'Caption');// 把label1 的caption 綁定到 edit1的text 上
     Binding.Bind(Edit1,'Text',Button1,'Caption');// 把button1 的caption 綁定到 edit1的text 上
     Binding.Bind(Edit1,'Text',Edit2,'Text',[mwboTwoWay]); //edit1和 edit2的text 雙向綁定

end;

運行一下雙向綁定

點擊按鈕後,隨便在edit1 和edit2裏面輸入文字,都會同步顯示在別的控件上。code

接下來咱們作一個對象列表,使用bind 把對象列出來,並能夠先後移動。component

 TLine = class
  private
     FName:string;
     FAddress:string;
  public
     constructor Create(const AName:string; const AAddress:string);
     property Name:string read FName write FName;
     property Address:string read FAddress write FAddress;
  end;

  TLines = TObjectList<TLine>;

首先作一下對象定義,而後作好初始化和綁定orm

procedure TForm1.Button4Click(Sender: TObject);
begin
     bnd:=nil;
     Binding.Clear;

     if lines<>nil then
        FreeAndNil(lines);

     lines:=TLines.Create;
     lines.Add(TLine.Create('紅魚兒','四平'));
     lines.Add(TLine.Create('努力的幹','四川'));
     lines.Add(TLine.Create('夠浪','山東'));
     lines.Add(TLine.Create('竹子','福建'));


     Binding.Bind(Edit3,'Text',Label2,'Caption');
     Binding.Bind(Edit3,'Text',Button2,'Caption');

     // 綁定列表到控件上
     // 返回綁定導航
     bnd:=Binding.Bind(lines,'Name',Edit3,'Text');
     Binding.Bind(lines,'Address',Edit4,'Text');
     if bnd.Navigator<>nil then
        bnd.Navigator.First;
end;

運行

能夠先後移動對象。

亦能夠實現雙向綁定,也就是經過控件界面修改對象屬性。

  // 綁定列表到控件上
     // 返回綁定導航
     bnd:=Binding.Bind(lines,'Name',Edit3,'Text',[mwboTwoWay]);
     Binding.Bind(lines,'Address',Edit4,'Text',[mwboTwoWay]);

 

 

下面看一下如何綁定數據表

作一個數據庫鏈接

並在窗體上放置幾個標準的控件,如圖

注意,這裏須要加入引用單元  kbmMWSmartBindVCL, 若是是FMX 窗體,須要引用單元 kbmMWSmartBindFMX。

加入初始化代碼

procedure TForm1.initClick(Sender: TObject);

begin
     bnd:=nil;
     Binding.Clear;
     if dataset<>nil then
        FreeAndNil(dataset);

    uniquery1.Open;

    dataset:=uniquery1;

    bnd:=Binding.Bind(dataset,'Name',label3,'caption');
    Binding.Bind(dataset,'capital',edit5,'text');
     Binding.Bind(dataset,'continent',edit6,'text');
     Binding.Bind(dataset,'area',edit7,'text');
     Binding.Bind(dataset,'population',edit8,'text');



    StringGrid1.RowCount:=dataset.RecordCount;


     bnd:=Binding.Bind(dataset,'Name',StringGrid1,'#0');
     Binding.Bind(dataset,'capital',StringGrid1,'#1');
     Binding.Bind(dataset,'continent',StringGrid1,'#2');
     Binding.Bind(dataset,'area',StringGrid1,'#3');
     Binding.Bind(dataset,'population',StringGrid1,'#4');

  
     if bnd.Navigator<>nil then
        bnd.Navigator.First;

end;

運行程序

 

 完美,所有正確顯示出來。

咱們也能夠加入編輯功能

稍微處理一下代碼

procedure TForm1.initClick(Sender: TObject);

begin
     bnd:=nil;
     Binding.Clear;
     if dataset<>nil then
        FreeAndNil(dataset);

    uniquery1.Open;

    dataset:=uniquery1;

    bnd:=Binding.Bind(dataset,'Name',label3,'caption');
    Binding.Bind(dataset,'capital',edit5,'text',[mwboTwoWay]);
     Binding.Bind(dataset,'continent',edit6,'text',[mwboTwoWay]);
     Binding.Bind(dataset,'area',edit7,'text',[mwboTwoWay]);
     Binding.Bind(dataset,'population',edit8,'text',[mwboTwoWay]);



    StringGrid1.RowCount:=dataset.RecordCount;


     bnd:=Binding.Bind(dataset,'Name',StringGrid1,'#0');
     Binding.Bind(dataset,'capital',StringGrid1,'#1');
     Binding.Bind(dataset,'continent',StringGrid1,'#2');
     Binding.Bind(dataset,'area',StringGrid1,'#3');
     Binding.Bind(dataset,'population',StringGrid1,'#4');


     if bnd.Navigator<>nil then
        bnd.Navigator.First;

end;

 

修改一下,右面的grid 裏面跟着變化過來了,注意這個永久保存到數據庫裏面了。

實現了對數據庫的修改。

以上功能已經遠遠超過了delphi 自身的bind 功能,並且速度很是好。後面有空再講一下kbmmw smartbind 的更高級的功能。

相關文章
相關標籤/搜索