关于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功能的更多相关文章

  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. FOJ Problem 2261 浪里个浪

                                                                                                        ...

  2. 标准C程序设计七---41

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  3. docker mysql 导入导出数据

    导出数据 1.导出mysql单张表结构和数据: docker exec -it my-mysql mysqldump dbname -uroot -p123456 --tables tname > ...

  4. hdu 1728(搜索)

    逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  5. LeetCode OJ——Convert Sorted Array to Binary Search Tree

    http://oj.leetcode.com/problems/convert-sorted-array-to-binary-search-tree/ 将一个升序的数组转换成 height balan ...

  6. Codeforces 401D Roman and Numbers

    题目大意 Description 给定一个数 N(N<1018) , 求有多少个经过 N 重组的数是 M(M≤100) 的倍数. 注意: ①重组不能有前导零; ②重组的数相同, 则只能算一个数. ...

  7. SQL Server 存储

    http://baoqiangwang.blog.51cto.com/1554549/541298/

  8. [IOS笔记] - 动画animation

    //移动 - (IBAction)translation:(id)sender { CABasicAnimation *traslation = [CABasicAnimation animation ...

  9. VMWare 无损扩展磁盘大小

    1. 所需文件(gparted) 可以去gparted主页下载LiveCD 下载地址:http://sourceforge.net/projects/gparted/files/gparted/ 或百 ...

  10. Unity -- Collider(碰撞器与触发器)

    (2d与3d的Collider可以相互存在,但是无法相互协作,如2d是无法检测3d的,反之,一样) 在目前掌握的情况分析,在Unity中参与碰撞的物体分2大块:1.发起碰撞的物体.2.接收碰撞的物体. ...