摆摆控件,就可以实现多功能(提交、修改、浏览)的表单了[原]

简介:

最近封了一个简单的类库,主要目的是帮助实现简化制作表单页面的工作。使得制作一个具有提交、修改、浏览功能的表单页面,只需要摆好控件再写很少量的代码即可。在需求发生变动需要调整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: http://files.cnblogs.com/justinw/JustinDemo.rar
Justin.UILibrary: http://files.cnblogs.com/justinw/Justin.UILibrary.rar

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


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

相关文章
【微信小程序-原生开发】实用教程10 - 动态的新增、修改、删除(含微信云数据库的新增、修改、删除,表单弹窗、确认弹窗、日期选择器、单行输入框、多行输入框、滑动组件的使用)
【微信小程序-原生开发】实用教程10 - 动态的新增、修改、删除(含微信云数据库的新增、修改、删除,表单弹窗、确认弹窗、日期选择器、单行输入框、多行输入框、滑动组件的使用)
322 0
|
11月前
|
微信小程序实现不同按钮跳转同一个页面显示不同内容
微信小程序实现不同按钮跳转同一个页面显示不同内容
185 0
【sgUploadTray_v2】自定义组件:升级版上传托盘自定义组件,可实时查看上传列表进度,可以通过选项卡切换上传中、成功、失败的队列,支持翻页,解决了列表内容太多导致卡顿的情况。(一)
【sgUploadTray_v2】自定义组件:升级版上传托盘自定义组件,可实时查看上传列表进度,可以通过选项卡切换上传中、成功、失败的队列,支持翻页,解决了列表内容太多导致卡顿的情况。
|
11月前
|
PHP
【ripro美化】设计子主题sheji-child素材资源下载站模板(集成后台+无授权+独立运行)
安装教程 第一步:首先对应单个上传替换包里面的文件到ripro原主题里面(单个文件覆盖不是替换整个文件包) 第二步:将下载的sheji-child压缩包上传到/wp-content/themes/直接解压,完成后到后台-外观-启用子主题 后台新建页面 1:页面-新建页面-选择VIP介绍模板,链接填vip 2:页面-新建页面-选择自助申请友链模板,链接填links
78 0
【ripro美化】设计子主题sheji-child素材资源下载站模板(集成后台+无授权+独立运行)
layui框架实战案例(20):常用条件判断和信息展示技巧(图片预览、动态表格、短信已读未读、链接分享、信息脱敏、内置框架页)
layui框架实战案例(20):常用条件判断和信息展示技巧(图片预览、动态表格、短信已读未读、链接分享、信息脱敏、内置框架页)
708 0
公开访问,子表单没有批量导入按钮
宜搭,子表单,批量导入,公开访问,没有批量导入功能
公开访问,子表单没有批量导入按钮
(成功最详细版本,自定义传参失败,跳转出现空白页面,校验文件失败)微信小程序扫码跳转小程序指定页面保姆级教程
文档里面虽然说了,但是还是有几个坑的地方,坑等文章最后面再写扫普通链接二维码打开小程序 | 微信开放文档
467 0
(成功最详细版本,自定义传参失败,跳转出现空白页面,校验文件失败)微信小程序扫码跳转小程序指定页面保姆级教程
前端工作总结108-修改新增按钮显示逻辑
前端工作总结108-修改新增按钮显示逻辑
137 0
前端工作总结108-修改新增按钮显示逻辑