初识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的用法. ...
随机推荐
- 【CF676C】Vasya and String(二分查找,线性扫描尺取法)
题意: 给出一个长度为n的字符串,只有字符'a'和'b'.最多能改变k个字符,即把'a'变成'b'或把'b'变成'a'. 问改变后的最长连续相同字符的字串长度为多少. 首先是二分查找,好想也好写 .. ...
- C语言标准库
共15个,请查看,在linux下的目录位/usr/share/include assert.h ctype.h errno.h float.h limits.h locale.h math.h set ...
- Lua开发环境搭建(Mac OS X)
1. 安装Rudix Rudix: http://rudix.org curl -O https://raw.githubusercontent.com/rudix-mac/rpm/2015.4/ru ...
- 算法 & 数据结构——任意多边形填充
需求 . 在计算机中,选区是一个很常见的功能,例如windows按住鼠标左键拖动划出矩形选区,Photshop通过钢笔工具任意形状选区.选区本身不过是通过线段闭合的一个几何形状,但是如何填充这个选区, ...
- Careercup | Chapter 6
6.2 There is an 8x8 chess board in which two diagonally opposite corners have been cut off. You are ...
- cmake ccmake
下载libqrencode源码编译过程 git clone https://github.com/fukuchi/libqrencode.git 2001 mkdir build 2002 cd ...
- 【UTR #2】题目排列顺序
题目描述 "又要出题了." 宇宙出题中心主任 -- 吉米多出题斯基,坐在办公桌前策划即将到来的 UOI. 这场比赛有 $n$ 道题,吉米多出题斯基需要决定这些题目的难度,然后再在汪 ...
- 某考试 T3 bitboard
bitboardDiscription 天才发明家小K 制造了一块比特板.板子上有2^n个比特元,编号为0 ∼ 2^n−1.每个比特元
- Java创建和解析Json数据方法(五)——Google Gson包的使用
(五)Google Gson包的使用 1.简介 Gson包中,使用最多的是Gson类的toJson()和fromJson()方法: ①toJson():将java对象转化为json数据 ...
- IntelliJ IDEA删除所有断点
参考: http://blog.csdn.net/yanziit/article/details/73459795