初识kbmmw 中的smartbind功能
关于kbmmw smartbind 的开发原因及思路,大家可以参见官方的博客说明和红鱼儿的翻译。
今天我就实例操作一下,给大家演示一下具体实现。
我们新建一个工程
放几个基本的控件
在单元里面加上引用 kbmMWSmartBind。
添加事件代码
- 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里面输入文字,都会同步显示在别的控件上。
接下来我们做一个对象列表,使用bind 把对象列出来,并可以前后移动。
- 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>;
首先做一下对象定义,然后做好初始化和绑定
- 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 的更高级的功能。
初识kbmmw 中的smartbind功能的更多相关文章
- 初识kbmmw 中的ORM
在kbmmw 5.02.1 中,加入了ORM 的功能(这里可能和其他语言的定义不完全一样),我们就简单的认为 它就是一个类与数据库的转换吧.今天就先介绍一下如何通过kbmmw 的ORM 功能,实现类与 ...
- 珍惜每一滴水(kbmmw 中的内存调试)
作为一个服务器端的应用,最基本的要求就是稳定,当然要做一个稳定的服务器端,需要涉及到很多方面, 内存泄露就是稳定的一个致命杀手,因为服务器的物理内存是有限的,即使一个功能有很小的内存泄露,经过 长时间 ...
- 在指定时间干,必须干(kbmmw 中的事件调度)
从去年开始,kbmmw 慢慢增加内涵,除了完善各种服务外,陆续增加和扩展了作为一个中间件必须有的功能, 例如,权限管理.日志系统.调度系统.内存调试等功能. 今天给大家介绍一下kbmmw 的调度事件, ...
- 初识 MySQL 5.6 新功能、参数
摘要: 继上一篇的文章 初识 MySQL 5.5 新功能.参数 之后,现在MySQL5.6 针对 MySQL5.5 各个方面又提升了很多,特别在性能和一些新参数上面,现在看看大致提升了哪些方面(后续不 ...
- SSH 框架学习之初识Java中的Action、Dao、Service、Model-收藏
SSH 框架学习之初识Java中的Action.Dao.Service.Model-----------------------------学到就要查,自己动手动脑!!! 基础知识目前不够,有感性 ...
- kbmmw 中的进程管理小工具
kbmmw 5.6.20 发布了,本版本带来一个小功能,就是可以在kbmmw 应用里面建立和管理进程, 虽然你可以直接调用windows api 做类似的事情,但是kbmmw 里面简化了操作,也加强了 ...
- kbmmw 中虚拟文件操作入门
kbmmw 中一直有一个功能,但是基本上都没有提过,但是在实际应用中,却非常有用,这个功能就是 虚拟文件包功能,他可以把一大堆文件保存到一个文件里面,方便后台管理. kbmmw 的虚拟文件在单元kbm ...
- ADO.NET 中的新增功能
ADO.NET 中的新增功能: .NET Framework (current version) 以下是 .NET Framework 4.5 中 ADO.NET 的新增功能. SqlClient D ...
- CSS3中的动画功能(一)
css3中的动画功能分为transitions功能和animations功能,这两种功能都可以通过改变css属性值来产生动画效果.今天带大家一起来看看css3动画功能中的transitions的用法. ...
随机推荐
- AC日记——[Sdoi2013]森林 bzoj 3123
3123: [Sdoi2013]森林 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 3216 Solved: 944[Submit][Status] ...
- HDU 3068 Manacher
题目链接:http://hdu.hustoj.com/showproblem.php?pid=3068 今天学习一下马拉车算法,虽然mg讲过,但是没有系统去学. 算法学习:参考博客 马拉车模板题. # ...
- BZOJ2243 [SDOI2011]染色(树链剖分+线段树合并)
题目链接 BZOJ2243 树链剖分 $+$ 线段树 线段树每个节点维护$lc$, $rc$, $s$ $lc$代表该区间的最左端的颜色,$rc$代表该区间的最右端的颜色 $s$代表该区间的所有连续颜 ...
- 关于main()
1.在c语言中: int main( void ) int main( int argc, char *argv[] ) 如果不需要从命令行中获取参数,请用int main(void) :否则请用in ...
- css查缺补漏1
css可以写在哪里 1.和要装饰的标签写在一起 2.内部样式表(内嵌式)是写在head头部标签中,并且用style标签定义 3.外部样式表(外链式) <head><link rel= ...
- BZOJ 2085 [POI2010] Hamsters
题面 Description Tz养了一群仓鼠,他们都有英文小写的名字,现在Tz想用一个字母序列来表示他们的名字,只要他们的名字是字母序列中的一个子串就算,出现多次可以重复计算.现在Tz想好了要出现多 ...
- Java中没有C#的out关键字,但可以通过数组实现类似的效果
其实传递的就是数组的指针,里面的每一项的值还是那块内存,所以能直接操作里面的值.如果单纯传指定的值,那么里面操作的就是新的一块内存块. 用数组实现的效果如下: class B{ String cnt= ...
- 启动weblogic域不需要输入密码设置方法
分类: IT综合技术 一.问题描述与分析 部署完WEBLOGIC后,在每次启动时执行./startWebLogic.sh脚本时,都会停在输入用户名与密码这里,相当不方便.所以要做到启动过程不输 ...
- win10安装 pandas
pip install -i https://pypi.douban.com/simple pandas
- OpenGL中FBO的概念及其应用 [转]
http://www.cppblog.com/kongque/archive/2010/08/26/124754.html FBO一个最常见的应用就是:渲染到纹理(render to texture) ...