面向对象之自动绑定数据源

实现数据控件与原始数据的绑定是实现数据展示与编辑的基本前提。在常规的设计模式下实现数据绑定有两种方式:
    1)第一种方式:在窗体上引用数据对象→逐个拖放控件→分别设置控件与字段的绑定关系。这无疑是个不厌其烦的重复过程,是个没有任何创造性的过程,也是一个容易出现隐性bug的设计过程。
    2)另一种方式:通过生成器指定物理表与控件的关系,由生成器完成控件与数据源的绑定。这里的变化不过是把事后定义改变成事前定义,虽然增加了自动化成分,但在数据源变化的时候这些结果也会同时付之东流。如果根据设计变化进行调整则会重复第一种方式的过程。
    实现封装的目的就是要彻底摆脱这种低能、低效的重复工作。为此,我们给控件增加了“PI_绑定属性”,同时还要遵行命名规则的必要约束。
    由于需要实现数据绑定的控件类不止这一个,所以实现绑定的方法并不是基于控件自身的封装,如果在窗体中封装了一个遍历的方法,就能通过一种简单的方式实现窗体内所有具备“PI_绑定属性”的数据源绑定问题。
    “PI_绑定属性”具有双重作用:通知执行绑定的程序自身是否要参与绑定处理;如果非NULL则表示参与绑定。绑定程序会继续下面的动作:
    1)得到“PI_绑定属性”的值;
    2)从该值得到所规定的属性名(本例是控件原有的Text属性);
    3)按规定的属性名(Text)取出属性中的值(本例是“TB_FR_名称”);
    4)找到第一个下画线(与此前的字符个数无关),截取后面的部分作为字段名(本例应是:“FR_名称”);
    5)按所得到的字段名(“FR_名称”)实现对数据集中对应字段的绑定。
    初看来,这似乎是个“多此一举”的构思,其实不然,这里解决了两个非常重要的问题:
    1)在窗体上布局数据控件并不需要配置数据源:“无错代码”是.NET所标榜的编程机制,这就会导致在设计状态下必须配置好数据源才能允许放置与数据绑定有关的控件。很多时候我们并不能在设计状态下确定数据源(只有在运行时才能给定),这就会给编程带来一系列麻烦的事。在代码中可以看到我们通过错误陷阱屏蔽了该环境下中的报错,所以就能在没有数据源的情况完成对“TB_”实例的引用。
    2)可以在运行状态下配置数据源是提高编程效率的一个重要命题,这个设计为后续的自动化实现奠定了必要的基础,也为运行状态下的功能调整提供了可能性。
在这里还要说明以下几点:
    1)也可以在“PI_绑定属性”中填写控件的“Name”属性,因为“Name =‘TB_FR_名称’”所以其效果相同。在一个系统中对“PI_绑定属性”的引用应当尽量保持一致,以便交流。
    2)凡是继承了“ITF_绑定”接口的控件都有同样的功能。
    3)按字段名称填写控件属性是个烦琐的工作,既然我们屏蔽了系统的自动化服务,势必就要建立自己的自动化机制,否则就不能达到提高效率的目的。这部分请参看第8.3节。
    这种绑定经常与窗体上的Grid对象配合使用,承载控件的容器与Grid对象会通过更高层次的控件属性实现联动。在自定义Grid的过程中会进一步讨论这些问题。

面向对象之自动绑定数据源相关推荐

  1. springBoot集成多数据源mybatisPlus(自动切换数据源)

    文章目录 1 背景 2 版本 3 配置 3.1 pom配置 3.1.1 父类pom 3.1.2 pom依赖 3.1.3 插件 3.2 application.yml配置 3.3 bean配置 3.3. ...

  2. c# easyui 赋值_C# DataGridView绑定数据源的方法

    开始以前,先认识一下WinForm控件数据绑定的两种形式,简单数据绑定和复杂数据绑定. 1. 简单的数据绑定 例1 using (SqlConnection conn = new SqlConnect ...

  3. repeater 控件ajax绑定数据源,【ASP.NET】第九课——使用DataList控件和Repeater控件绑定数据...

    知识点:掌握 DataList 控件呈现数据的方法: 掌握 Repeater 控件呈现数据的方法:掌握处理 Repeater 控件中的按钮事件. 1. 使用 DataList 控件呈现数据 在用 AS ...

  4. Gin 框架学习笔记(02)— 参数自动绑定到结构体

    参数绑定模型可以将请求体自动绑定到结构体中,目前支持绑定的请求类型有 JSON .XML .YAML 和标准表单 form数据 foo=bar&boo=baz 等.换句话说,只要定义好结构体, ...

  5. 使用Ext Form自动绑定Html中的Form元素

    2019独角兽企业重金招聘Python工程师标准>>> Java代码   //把ext 对象绑定在Html Form元素时的ext属性中 Ext.override(Ext.Compo ...

  6. japid-controller自动绑定的数据类型

    参考文献:http://www.playframework.org/documentation/1.2.3/controllers 当参数名和HTTP请求中的参数名(即界面中的name)相同时,后台C ...

  7. DevExpress TreeList 调优_绑定数据源方式, 放弃原来的AppendNode加载数据的方式

    DevExpress TreeList加载大批量数据的时候绑定数据源 dataTable. 注意事项1: 由于一旦绑定了数据源dataTable的些许变化便在TreeList中有所体现, 所以等dat ...

  8. spinbox 上下箭头事件_[React] 3 - 自动绑定 (事件绑定)

    1. 自动绑定 (事件绑定) 绑定this: React为什么要这么做? 是js中this绑定方式决定的,和react工作方式无关. 函数处理, 是作为回调传递的,这样就会丢失了上下文, 所以this ...

  9. 章鱼哥出品—VB.NET DataGridView绑定数据源 quot;与货币管理器的位置关联的行不能设置为不可见quot; 问题的解决...

    DtaGridView绑定数据源后.假设想让数据条件显示的话,直接使用  My_Row.Visible = False就会出错.错误类型是 "与货币管理器的位置关联的行不能设置为不可见&qu ...

  10. JSBing-js自动绑定C++

    什么是JSB JSB是JavaScript binding的简称.Cocos2d-JS中使用的javascript引擎是Mozilla 的spidermonkey,而JSB绑定的目的就是让javasc ...

最新文章

  1. js调整数组某些元素到指定位置顺序_如何将一个 JavaScript 数组打乱顺序?
  2. 调试你的Python代码
  3. java-数据结构-续
  4. instanceof 和 对象转型
  5. java 日期_Java中的日期操作
  6. selenium 配合多线程_Selenium Webdriver 远程测试和多线程并发测试
  7. Python绘图 \ 数据可视化
  8. 小米2s刷原生安卓_小米2/2s/2a刷android4.4教程(附2/2s/2a安卓4.4卡刷包下载)
  9. 电路分析:运放和三极管组成的恒流源电路
  10. 俞敏洪+马云+牛根生+史玉柱经典语录
  11. Let's Encrypt 客户端将由EFF管理
  12. 千锋教育python老师_千锋老师分享Python经典面试题
  13. 国产电脑支持Linux吗,天玥计算机(电脑)支持UOS、银河麒麟、Deepin等国产操作系统...
  14. 支持向量机入门到精通
  15. MAC_BOOKPRO苹果电脑系统常用快捷键大全
  16. 原来华为手机的语音助手这么好用,说话即可语音翻译,方便又实用
  17. 华为账号登录的手游如何在雷电(MuMu等)模拟器上登录游戏(以三国杀为例)
  18. java perm 查看_JVM 分析工具和查看命令,超详细
  19. Kite的学习历程之SpringCloud之Rest微服务构建之微服务提供者支付Moudle
  20. Win10下徽标Win键组合快捷键大全

热门文章

  1. MySQL · BUG分析 · Rename table 死锁分析
  2. Prism6下的MEF:添加Logger
  3. Ajax+Java实现大文件切割上传
  4. 程序MD5校验的作用
  5. Linux下2号进程的kthreadd--Linux进程的管理与调度(七)
  6. C++primer 12.2.1节练习
  7. 【Spring 核心】装配Bean(一) 自动化装配
  8. navicat和 plsql 连接oracle数据库 总结
  9. 【javascript】ajax 基础(转)
  10. 如何使用四个语句来提高 SQL Server 的伸缩性