初识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的用法. ...
随机推荐
- WEB学习-CSS行高、字体,链接的美化以及背景
行高和字号 CSS中,所有的行,都有行高.盒模型的padding,绝对不是直接作用在文字上的,而是作用在“行”上的. 单行文本垂直居中 文本在行里面是居中 其中,行高:盒子高; 需要注意的是,这个小技 ...
- R语言集合函数
union intersect setdiff(A,B):A-B A %in% B :A是否存在于B
- 计蒜客 微软大楼设计方案(RMQ)
题目链接 微软大楼设计方案 中文题就不说题意了~ 首先是简单版本 满足$1 <= n, m <= 50$ 那么设$c[i][j]$为从第$i$幢楼到第$j$幢楼的最低的那幢楼的高度 计算两 ...
- spring的自动装配Bean与自动检测Bean
spring可以通过编写XML来配置Bean,也可以通过使用spring的注解来装配Bean. 1.自动装配与自动检测: 自动装配:让spring自动识别如何装配bean的依赖关系,减少对<pr ...
- luogu P1197 [JSOI2008]星球大战
题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过特殊的以太隧道 ...
- CODECHEF Oct. Challenge 2014 Children Trips
@(XSY)[分塊, 倍增] Description There's a new trend among Bytelandian schools. The "Byteland Tourist ...
- 小程序使用wxParse插件解析html标签图片间距问题
转自:https://www.cnblogs.com/likun123/p/9543376.html 小程序解析html标签,就需要用到wxParse啦.但是在解析连续图片的时候,会发现图片之间会有间 ...
- Exiting an iOS App with Xamarin
referenced from: http://www.redbitdev.com/exiting-ios-app-with-xamarin-ios/ The team is in the middl ...
- 实机桌面上给虚拟机安装系统(分区,恢复GHO)
在虚拟机里安装系统大家都会了.我这里介绍一种方法无须进入虚拟机里操作.全部在实机里完成对虚拟机安装系统(分区.恢复GHO).这里要使用到的工具如下1分区工具DISKGENIUS2虚拟光驱3Ghost镜 ...
- Leanote 二进制版详细安装教程 Windows
https://github.com/leanote/leanote/wiki 本教程适合 Windows 用户的二进制版安装. Windows 用户的源码版安装,参见这里. Mac, Linux 用 ...