zoukankan      html  css  js  c++  java
  • 初识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 的更高级的功能。

  • 相关阅读:
    游标和视图
    sql server 变量与集合运算
    sql server 流程控制
    sql server 基础查询和子查询
    数据库范式快速理解
    创建数据库与数据表
    SQL server 使用
    Android studio 下载依赖jar包慢
    java根据list数据通过接口姓名并填充
    【翻译】Promises/A+规范
  • 原文地址:https://www.cnblogs.com/xalion/p/10852685.html
Copyright © 2011-2022 走看看