.NET快速开发实践之应用IExtenderProvider实现对象与UI控件的绑定

         现在企业级的信息系统应用开发之中,数据层采用了ORM,解放了之前开发最大工作量的核对SQL语句,我到现在还曾经记得在2002年实医院管理信息系统时对齐一个插入数据的SQL语言搞的我头大,从那之后就能不能把这样的东西换个方式,之后搞.NET有了ORM,对齐SQL语句的事终于解放了,但是界面上的UI与ORM对象之间的数据交互避免不了,把数据实体的值显示在UI控件上或者把UI控件的值更新到数据对象,我们不得不这样去写:

         取实体的值并显示在界面:

   private void Display(IPerson person)
    {
        this.tbName.Text = person.Pname;
        this.dtpBirthday.Value = person.Birthday;
        this.tbMobPhone.Text = person.Mobphone;
        this.tbTel.Text = person.Tel;
        this.tbQQ.Text = person.QQ;
        //... 
        this.tbWorkUnit.Text = person.Workunit;
        this.tbInsureCode.Text = person.Insurecode;
        this.tbIDCode.Text = person.Idcode;
    }

        取UI控件的值并保存至对象:

    private void ToObject(IPerson person)
    {
        person.Pname = this.tbName.Text;
        person.Birthday = this.dtpBirthday.Value;
        person.Mobphone = this.tbMobPhone.Text;
        person.Tel = this.tbTel.Text;
        //...
        person.Workunit = this.tbWorkUnit.Text;
        person.Insurecode = this.tbInsureCode.Text;
        person.Idcode = this.tbIDCode.Text;
    }

        如果说一个UI界面上控件数量有限,或许这直方式写着也就没有什么,可以在某些应用,控件多的可以让你吐血,我下面给大有展示一个:

       我想说很杯具的是这个UI截图还没有截全,有心的朋友可以去数一数有多少控件,也大概会知道数据库有多少个字段。

       我想说很杯具的是这个UI截图还没有截全,有心的朋友可以去数一数有多少控件,也大概会知道数据库有多少个字段,当我们修改了数据库或者ORM定义,或者程序在修改时,会不会吐血,反正我看着就眼花花了。

       我是个懒汉,总是在寻找懒法式的做法,能不能想个办法做的简单一点,曾经想过使用UI的代码生成器,生成数据绑定的UI代码,这曾经认为不失一个好的办法,但是,生成代码的过程中,界面控件如何布局就成了一个很不好处理的问题,除非搞一个UI设计器,通过拖放ORM对象的属性以达到设计界面的目的,但是目前,AgileEAS.NET平台还没有做到如些强大的地步。

       我相信快速开发是一个理念与实践,工具是一种辅助手段,能大大提高开发效率,相信AgilEAS.NET平台的UI设计器在不久的将来即会让开发人员看到,目前我们还是以其他方式解决这个问题。

       在以前的开发过,曾经使用IExtenderProvider实现过控件焦点跳转的功能,所以也就想到了通过IExtenderProvider搞一个对象与UI的绑定扩展组件,定义UI与对象属性的映射关系的方法实现这种绑定。

       在AgileEAS.NET平台中,提供了一个DataUIMapper的组件,由EAS.Data.DataUIMapper程序集承载,他能同时提供WinForm与WebForm控件与数据对象绑定。

       下面我以一个例子的方式来看看这种绑定,下图是一个典型的属性编辑窗口,用于新建、查看和修改一个特定ORM对象的值:

       在UI上面,我们安排了数据编辑相关的9个输入控件,以及一个DataUIMapper组件,我们也可以在VS的控件属性窗口中看到项目编码文本框的映射关系Code->tbCode.Text,我们可以通过输入控件的扩展属性设置这种映射关系,也可以通过DataUIMapper组件的映射关系集合管理这些映射:

       在设置了DataUIMapper组件DataSourceType属性之后,我们可以通过下拉列表框选择数据对象的属性,如果不设置DataSourceType属性,我们则可以通过直接输入数据属性的方法完成这种绑定设置。

       当我们设置好这些绑定关系之后,如何利用DataUIMapper完成对象与UI的交互呢,DataUIMapper提供了DataSource属性和UpdateObject、UpdateUI方法完成数据与UI的交互,上例UI中的读对象和写对象的可以使用以下方式完成:

       更新对象到UI:

     this.dataUIMapper1.DataSource = this.Info;
    this.dataUIMapper1.UpdateUI();
    this.cbxSure.SelectedIndex = this.Info.Insurerate - 1;

       或者

     this.dataUIMapper1.UpdateUI(this.Info);
    this.cbxSure.SelectedIndex = this.Info.Insurerate - 1;

       更新UI到对象:

     this.dataUIMapper1.DataSource = this.Info;
    this.dataUIMapper1.UpdateObject();
    info.Insurerate = this.cbxSure.SelectedIndex + 1;

 

       或者

     this.dataUIMapper1.UpdateObject(info);
    info.Insurerate = this.cbxSure.SelectedIndex + 1;   

       上面的代码及我做了一个简单的例子,请下载Exam.DataUIMapper.rar,我在实现DataUIMapper组件的过程中参考过codeproject上的Leveraging .NET Components and IDE Integration: UI AOP in an MVC use case一文,原来作者的实现非常优雅。

QQ群:15118502

链接:AgileEAS.NET应用开发平台介绍

AgileEAS.NET之敏捷并行开发方法

敏捷软件工程实验室

时间: 2024-10-31 17:33:43

.NET快速开发实践之应用IExtenderProvider实现对象与UI控件的绑定的相关文章

.NET快速开发实践之应用IExtenderProvider实现输入法自动切换

         我在前面的.NET快速开发实践中的IExtenderProvider扩展组件和.NET快速开发实践之应用IExtenderProvider实现对象与UI控件的绑定两篇Post介绍了IExtenderProvider扩展编程模式和应用IExtenderProvider实现实体与对象的做法与例子,下面我为介绍一下在管理信息系统开发中一个常用的功能,输入法的切换,很多在线事务处理系统业务量非常的繁忙,在特定的某个时刻,比如在his应用中的挂号.收费,窗口业务中业务办理者排着长长的队,

.NET快速开发实践之应用IExtenderProvider实现控件焦点跳转

         我在前面的.NET快速开发实践中的IExtenderProvider扩展组件和其他两篇Post介绍了IExtenderProvider扩展编程模式和应用IExtenderProvider实现实体与对象的做法与例子,下面我为介绍一下在管理信息系统开发中一个常用的功能,控件的输入焦点跳转,我们知道,系统为我们提供了Tab和Shift+Tab切换输入焦点的功能,但是这里面有一个问题,即最终操作者最不习惯于使用Tab进行切换输入焦点,因为都已经习惯于无鼠标操作,常使用回车,上下方向键进

.NET快速开发实践中的IExtenderProvider扩展组件

          说起扩展编程组件,我们不得不起到一个接口IExtenderProvider,参考msdn的定义:定义将属性扩展到容器中的其他组件的接口;下面我贴上IExtenderProvider的定义: /// <summary> /// 定义将属性扩展到容器中的其他组件的接口. /// </summary> public interface IExtenderProvider { /// <summary> /// 指定此对象是否可以将其扩展程序属性提供给指定的

IOS学习资源收集--开发UI控件相关

收集的一些本人了解过的iOS开发UI控件相关的代码资源(本文持续补充更新) 内容大纲: 1.本人在github上也上传了我分装好的一些可重复利用的UI控件 2.计时相关的自定义UILabel控件     正文: 1.本人在github上也上传了我分装好的一些可重复利用的UI控件 示例:   网址:https://github.com/HeYang123456789/UIView   2.计时相关的自定义UILabel控件 网址:https://github.com/mineschan/MZTim

GIS开发随笔--GIS技术的一点理解和MapNet控件试验

今天我们来讨论几个没有太大关联的内容,如果在这几个问题方面有人有自己独特的见解,或已经知道了这方面的技术,那么还请您在评论中提出来,供大家探讨,下面我们就来探讨一下吧. 一.这几天忙着测试和修改GIS系统,发现了一些Bug的同时也有了新的需求,不仅改变了界面风格和布局而且代码也少有变化,地图变化最大,需要加入栅格图(太可怕了,一幅栅格图竟然有1.3G),如何加载呢?因为这次的GIS系统是B/S结构的,而且功能也不小,除了栅格图外还有很多层的矢量图,并且提供图层数据和数据库数据的互查功能,所以非常

ios开发-如何改变一个视图控制器中除一个控件变灰

问题描述 如何改变一个视图控制器中除一个控件变灰 就像图片一样,当选择器触发时,其余控件色变成灰色怎么实现?求大神开发-如何改变一个视图控制器中除一个控件变灰-ios 添加子视图控制器">

Android应用开发UI控件ImageSwitcher的使用

本文来聊一聊AndroidUI开发中ImageSwitcher控件的使用.ImageSwitcher控件与ImageView类似,都可以用于显示图片,但是ImageSwitcher通过名字可以看出,主要是用于多张图片的切换显示.在本篇中,会介绍ImageSwitcher控件的基本属性的设置以及常用方法的调用.在最后会通过一个示例Demo来展示本篇博客中讲到的一些内容. ImageSwitcher ImageSwitcher是一个图片切换器,它间接继承自FrameLayout类,和ImageVie

swing开发图形界面工具配置(可自由拖控件上去)

swing开发图形界面工具,eclipse swing图形化操作界面工具配置 1.有一个小功能要有一个界面,之前知道有一个 图形化界面的(就是可以往上面拖控件布局的工具)JBuilder,今天上午就下了一个(1.6GB)好不容易下载完了,最新版本的(没找到老版本的,记得老版本的特好用)安装好之后发现没有swing拖控件的组件 ,还要去下载GUI等等插件(而且还是试用版).太无语JBuilder,还付费 ,果断给卸载了 卸载JBuilder后就不能用图形化界面的功能了吗?答案是有. 2. 中午吃饭

仿酷狗音乐播放器开发日志二十——换肤功能背景图片控件的制作(附源码)

转载请说明原出处,谢谢~~           <仿酷狗音乐播放器开发日志二十>里做了换肤功能的一部分,今天完成其他的部分.酷狗的换肤窗口里的背景图可以让用户选择来换图,原酷狗的背景图的小图标,有normal.hover.down等多种状态,鼠标移动上去便会发生变化.如图        当鼠标经过时会有个黑色图片覆盖,边框变为浅蓝色.并且在他上面显示出作者的一些信息.要实现这个效果应该另外开发一个控件来支持动态的信息展示效果.我把这个小控件的开发过程和源码发一下,给学习做duilib控件的新手