關於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 的更高級的功能。