关于kbmmw smartbind 的开发原因及思路,大家可以参见官方的博客说明和红鱼儿的翻译

今天我就实例操作一下,给大家演示一下具体实现。

我们新建一个工程

放几个基本的控件

在单元里面加上引用 kbmMWSmartBind。

添加事件代码

  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3. Binding.Clear;
  4. Binding.Bind(Edit1,'Text',Label1,'Caption');// 把label1 的caption 绑定到 edit1的text 上
  5. Binding.Bind(Edit1,'Text',Button1,'Caption');// 把button1 的caption 绑定到 edit1的text 上
  6. Binding.Bind(Edit1,'Text',Edit2,'Text',[mwboTwoWay]); //edit1和 edit2的text 双向绑定
  7.  
  8. end;

运行一下

点击按钮后,随便在edit1 和edit2里面输入文字,都会同步显示在别的控件上。

接下来我们做一个对象列表,使用bind 把对象列出来,并可以前后移动。

  1. TLine = class
  2. private
  3. FName:string;
  4. FAddress:string;
  5. public
  6. constructor Create(const AName:string; const AAddress:string);
  7. property Name:string read FName write FName;
  8. property Address:string read FAddress write FAddress;
  9. end;
  10.  
  11. TLines = TObjectList<TLine>;

首先做一下对象定义,然后做好初始化和绑定

  1. procedure TForm1.Button4Click(Sender: TObject);
  2. begin
  3. bnd:=nil;
  4. Binding.Clear;
  5.  
  6. if lines<>nil then
  7. FreeAndNil(lines);
  8.  
  9. lines:=TLines.Create;
  10. lines.Add(TLine.Create('红鱼儿','四平'));
  11. lines.Add(TLine.Create('努力的干','四川'));
  12. lines.Add(TLine.Create('够浪','山东'));
  13. lines.Add(TLine.Create('竹子','福建'));
  14.  
  15. Binding.Bind(Edit3,'Text',Label2,'Caption');
  16. Binding.Bind(Edit3,'Text',Button2,'Caption');
  17.  
  18. // 绑定列表到控件上
  19. // 返回绑定导航
  20. bnd:=Binding.Bind(lines,'Name',Edit3,'Text');
  21. Binding.Bind(lines,'Address',Edit4,'Text');
  22. if bnd.Navigator<>nil then
  23. bnd.Navigator.First;
  24. end;

运行

可以前后移动对象。

亦可以实现双向绑定,也就是通过控件界面修改对象属性。

  1. // 绑定列表到控件上
  2. // 返回绑定导航
  3. bnd:=Binding.Bind(lines,'Name',Edit3,'Text',[mwboTwoWay]);
  4. Binding.Bind(lines,'Address',Edit4,'Text',[mwboTwoWay]);

下面看一下如何绑定数据表

做一个数据库连接

并在窗体上放置几个标准的控件,如图

注意,这里需要加入引用单元  kbmMWSmartBindVCL, 如果是FMX 窗体,需要引用单元 kbmMWSmartBindFMX。

加入初始化代码

  1. procedure TForm1.initClick(Sender: TObject);
  2.  
  3. begin
  4. bnd:=nil;
  5. Binding.Clear;
  6. if dataset<>nil then
  7. FreeAndNil(dataset);
  8.  
  9. uniquery1.Open;
  10.  
  11. dataset:=uniquery1;
  12.  
  13. bnd:=Binding.Bind(dataset,'Name',label3,'caption');
  14. Binding.Bind(dataset,'capital',edit5,'text');
  15. Binding.Bind(dataset,'continent',edit6,'text');
  16. Binding.Bind(dataset,'area',edit7,'text');
  17. Binding.Bind(dataset,'population',edit8,'text');
  18.  
  19. StringGrid1.RowCount:=dataset.RecordCount;
  20.  
  21. bnd:=Binding.Bind(dataset,'Name',StringGrid1,'#0');
  22. Binding.Bind(dataset,'capital',StringGrid1,'#1');
  23. Binding.Bind(dataset,'continent',StringGrid1,'#2');
  24. Binding.Bind(dataset,'area',StringGrid1,'#3');
  25. Binding.Bind(dataset,'population',StringGrid1,'#4');
  26.  
  27. if bnd.Navigator<>nil then
  28. bnd.Navigator.First;
  29.  
  30. end;

运行程序

完美,全部正确显示出来。

我们也可以加入编辑功能

稍微处理一下代码

  1. procedure TForm1.initClick(Sender: TObject);
  2.  
  3. begin
  4. bnd:=nil;
  5. Binding.Clear;
  6. if dataset<>nil then
  7. FreeAndNil(dataset);
  8.  
  9. uniquery1.Open;
  10.  
  11. dataset:=uniquery1;
  12.  
  13. bnd:=Binding.Bind(dataset,'Name',label3,'caption');
  14. Binding.Bind(dataset,'capital',edit5,'text',[mwboTwoWay]);
  15. Binding.Bind(dataset,'continent',edit6,'text',[mwboTwoWay]);
  16. Binding.Bind(dataset,'area',edit7,'text',[mwboTwoWay]);
  17. Binding.Bind(dataset,'population',edit8,'text',[mwboTwoWay]);
  18.  
  19. StringGrid1.RowCount:=dataset.RecordCount;
  20.  
  21. bnd:=Binding.Bind(dataset,'Name',StringGrid1,'#0');
  22. Binding.Bind(dataset,'capital',StringGrid1,'#1');
  23. Binding.Bind(dataset,'continent',StringGrid1,'#2');
  24. Binding.Bind(dataset,'area',StringGrid1,'#3');
  25. Binding.Bind(dataset,'population',StringGrid1,'#4');
  26.  
  27. if bnd.Navigator<>nil then
  28. bnd.Navigator.First;
  29.  
  30. end;

修改一下,右面的grid 里面跟着变化过来了,注意这个永久保存到数据库里面了。

实现了对数据库的修改。

以上功能已经远远超过了delphi 自身的bind 功能,而且速度非常好。后面有空再讲一下kbmmw smartbind 的更高级的功能。

初识kbmmw 中的smartbind功能的更多相关文章

  1. 初识kbmmw 中的ORM

    在kbmmw 5.02.1 中,加入了ORM 的功能(这里可能和其他语言的定义不完全一样),我们就简单的认为 它就是一个类与数据库的转换吧.今天就先介绍一下如何通过kbmmw 的ORM 功能,实现类与 ...

  2. 珍惜每一滴水(kbmmw 中的内存调试)

    作为一个服务器端的应用,最基本的要求就是稳定,当然要做一个稳定的服务器端,需要涉及到很多方面, 内存泄露就是稳定的一个致命杀手,因为服务器的物理内存是有限的,即使一个功能有很小的内存泄露,经过 长时间 ...

  3. 在指定时间干,必须干(kbmmw 中的事件调度)

    从去年开始,kbmmw 慢慢增加内涵,除了完善各种服务外,陆续增加和扩展了作为一个中间件必须有的功能, 例如,权限管理.日志系统.调度系统.内存调试等功能. 今天给大家介绍一下kbmmw 的调度事件, ...

  4. 初识 MySQL 5.6 新功能、参数

    摘要: 继上一篇的文章 初识 MySQL 5.5 新功能.参数 之后,现在MySQL5.6 针对 MySQL5.5 各个方面又提升了很多,特别在性能和一些新参数上面,现在看看大致提升了哪些方面(后续不 ...

  5. SSH 框架学习之初识Java中的Action、Dao、Service、Model-收藏

    SSH 框架学习之初识Java中的Action.Dao.Service.Model-----------------------------学到就要查,自己动手动脑!!!   基础知识目前不够,有感性 ...

  6. kbmmw 中的进程管理小工具

    kbmmw 5.6.20 发布了,本版本带来一个小功能,就是可以在kbmmw 应用里面建立和管理进程, 虽然你可以直接调用windows api 做类似的事情,但是kbmmw 里面简化了操作,也加强了 ...

  7. kbmmw 中虚拟文件操作入门

    kbmmw 中一直有一个功能,但是基本上都没有提过,但是在实际应用中,却非常有用,这个功能就是 虚拟文件包功能,他可以把一大堆文件保存到一个文件里面,方便后台管理. kbmmw 的虚拟文件在单元kbm ...

  8. ADO.NET 中的新增功能

    ADO.NET 中的新增功能: .NET Framework (current version) 以下是 .NET Framework 4.5 中 ADO.NET 的新增功能. SqlClient D ...

  9. CSS3中的动画功能(一)

    css3中的动画功能分为transitions功能和animations功能,这两种功能都可以通过改变css属性值来产生动画效果.今天带大家一起来看看css3动画功能中的transitions的用法. ...

随机推荐

  1. AC日记——[Sdoi2013]森林 bzoj 3123

    3123: [Sdoi2013]森林 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 3216  Solved: 944[Submit][Status] ...

  2. HDU 3068 Manacher

    题目链接:http://hdu.hustoj.com/showproblem.php?pid=3068 今天学习一下马拉车算法,虽然mg讲过,但是没有系统去学. 算法学习:参考博客 马拉车模板题. # ...

  3. BZOJ2243 [SDOI2011]染色(树链剖分+线段树合并)

    题目链接 BZOJ2243 树链剖分 $+$ 线段树 线段树每个节点维护$lc$, $rc$, $s$ $lc$代表该区间的最左端的颜色,$rc$代表该区间的最右端的颜色 $s$代表该区间的所有连续颜 ...

  4. 关于main()

    1.在c语言中: int main( void ) int main( int argc, char *argv[] ) 如果不需要从命令行中获取参数,请用int main(void) :否则请用in ...

  5. css查缺补漏1

    css可以写在哪里 1.和要装饰的标签写在一起 2.内部样式表(内嵌式)是写在head头部标签中,并且用style标签定义 3.外部样式表(外链式) <head><link rel= ...

  6. BZOJ 2085 [POI2010] Hamsters

    题面 Description Tz养了一群仓鼠,他们都有英文小写的名字,现在Tz想用一个字母序列来表示他们的名字,只要他们的名字是字母序列中的一个子串就算,出现多次可以重复计算.现在Tz想好了要出现多 ...

  7. Java中没有C#的out关键字,但可以通过数组实现类似的效果

    其实传递的就是数组的指针,里面的每一项的值还是那块内存,所以能直接操作里面的值.如果单纯传指定的值,那么里面操作的就是新的一块内存块. 用数组实现的效果如下: class B{ String cnt= ...

  8. 启动weblogic域不需要输入密码设置方法

    分类: IT综合技术 一.问题描述与分析     部署完WEBLOGIC后,在每次启动时执行./startWebLogic.sh脚本时,都会停在输入用户名与密码这里,相当不方便.所以要做到启动过程不输 ...

  9. win10安装 pandas

    pip install -i https://pypi.douban.com/simple pandas

  10. OpenGL中FBO的概念及其应用 [转]

    http://www.cppblog.com/kongque/archive/2010/08/26/124754.html FBO一个最常见的应用就是:渲染到纹理(render to texture) ...