博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
摆摆控件,就可以实现多功能(提交、修改、浏览)的表单了[原]
阅读量:6322 次
发布时间:2019-06-22

本文共 1685 字,大约阅读时间需要 5 分钟。

最近封了一个简单的类库,主要目的是帮助实现简化制作表单页面的工作。使得制作一个具有提交、修改、浏览功能的表单页面,只需要摆好控件再写很少量的代码即可。在需求发生变动需要调整UI的时候,也仅是调整控件的摆放而已。而且还可以根据工作的流程制作多套表单,在实际使用的时候,根据流程不同来动态切换。这里发个简单的Demo,实际要比这复杂一些,但是Demo已足够阐述实现原理,目的也就达到了。

下面做简单的介绍,具体看代码。(代码是ASP.Net2.0/VS2005的,在C/S里的实现,原理也是一样的。)

约定:

1.表单上的控件ID名称需要同对应的实体的数据字段名相同。(以此为依据映射数据)

一、使用步骤:

1、引用Justin.UILibrary.dll;
2、添加一个用户自定义控件DemoUI.ascx;
3、摆放表单控件,简单演示如下图:
红色部分为自定义校验控件,这里只是个演示,实际中怎么弄随便了。
4、修改用户控件的代码如下:
5、到此,一个只管收集数据,显示数据,修改数据的UI用户自定义界面就做好了。下面需要在页面上使用这个用户自定义控件。Go on …
6、在页面需要显示这个表单的地方放一个PlaceHolder控件,这么做是为了可以动态加载用户自定义控件,从另一个角度来说,这也实现了动态替换不同的用户自定义控件功能,比如你有多个表单需要在不同的情况下动态切换,那么,使用PlaceHolder控件,再配合XML配置文件,一切就OK了。
7、然后在页面的*.aspx.cs里添加如下代码:
8、Ctrl+F5执行程序,一切就OK了!

二、效果演示:

a、提交的时候(除了下拉框,其它都为空):
b、浏览的时候(所有控件不可用)
c、修改状态(界面上有数据,为待编辑状态)
三、Deom总结
最后画了一个简单的顺序图,说明一下程序内部是如何执行的。其中,关于XML的部分在Demo里没有做,只是用注释标明了一下,这个很简单,但是功能却很强大,可以让你在运行时动态决定界面加载哪个预定义的表单用户自定义控件,所以有必要在图中画了一下。
四、关于Justin.UILibrary.dll
最后我们再简单说一下Justin.UILibrary.dll,有了它,使得制作表单的大部分工作变成了摆控件,它把报单里可以抽出来的东西尽量都封装了起来,使得大部分代码工作都得到了重用。这里简单说一下最核心的UI.cs类,它是表单控件的基类,如上面的步骤4所示,继承它之后,只需要附加很少的代码,即可以完成表单的后台代码工作。当然,这里提供的都是最基本的功能,如果用户自己有任何其他字定义功能,都可以自己在继承的基础上再进行扩展。
其中比较关键的几个地方是:
1.ExecActionEvent()方法
这个方法使用委托的机制,将最终按钮的功能如何实现抛出来由用户自己去实现,WHY?因为鬼才知道用户会做什么,这是封装控制不了的因数,所以要抛出去。
2.InitControl(UIType type)方法
这里相当于模板方法模式的应用,内部在不同状态下调用的三个virtual方法,给了SubCalss一个插入功能的机会,即,可以分别在提交、浏览、修改的状态下初始化界面时,加入自定义的功能。如步骤4中所做的,在提交的时候,将按钮的标题改为“提交”,在修改的时候,将按钮的标题改成“保存”,当然,用户自己还可以做很多别的什么事情,这个灵活性是封装的基类不去关心的,基类只提供“工作机会”,至于工作的怎么样,自己看着办吧。
如下图所示:
五、代码下载
JustinDemo: 
Justin.UILibrary: 

虽然这里还只是演示代码,部分地方还有待完善,但是这篇文章主要想说的是如何通过封装来重用和简化代码工作,重要的是其中的原理和思想,还希望各位朋友看过代码后多提宝贵意见。

本文转自Justin博客园博客,原文链接:http://www.cnblogs.com/justinw/archive/2006/10/04/520924.html,如需转载请自行联系原作者

你可能感兴趣的文章
3星|《三联生活周刊》2017年39期:英国皇家助产士学会于2017年5月悄悄修改了政策,不再鼓励孕妇自然分娩了...
查看>>
堆排序算法
查看>>
路由器ospf动态路由配置
查看>>
zabbix监控安装与配置
查看>>
python 异常
查看>>
可执行程序找不到lib库地址的处理方法
查看>>
Richard M. Stallman 给《自由开源软件本地化》写的前言
查看>>
rhel6下安装配置Squid过程
查看>>
在 Linux 下使用 fdisk 扩展分区容量
查看>>
如何在 Ubuntu Linux 16.04 LTS 中使用多个连接加速 apt-get/apt
查看>>
Delphi 操作Flash D7~XE10都有 导入Activex控件 shockwave
查看>>
oracle 学习笔记之名词解释
查看>>
MySQL Cluster搭建与测试
查看>>
python数据分析画图体验
查看>>
军规15 确保集成和调用第三方APP
查看>>
Etcd和ZooKeeper,究竟谁在watch的功能表现更好?
查看>>
Shredding Company 碎纸机,dfs()枚举每一种情况,再加剪枝。
查看>>
结构化程序设计03 - 零基础入门学习Delphi12
查看>>
STM32的TAMPER-RTC管脚作为Tamper的使用[转]
查看>>
[记]一个逐步“优化”的范例程序
查看>>