RFID会议签到系统总结(二十)――数据窗体状态控制
2007-07-26 11:45
239 查看
数据窗体的状态大概可以概括为以下几种,即初始、浏览、新增、修改、删除、查询(单数据窗体的查询是一种简单地基于当前表的查询,各个条件之间只能“与”运算,关系运算只有“等于”,当然字符串字段会有“like”)。在各种状态下,窗体的UI呈现是不相同的,而且在不同状态下,一些按钮的动作是各异的。比如“确定”按钮,在新增状态下按“确定”和在查询状态下按“确定”明显是不同的二种动作。上述的这些情况可以用GoF的状态模式来解决之(很奇怪,这个模式很多人不甚清楚,以前有几次出去面试的时候说到这个模式,对面的人居然问我这东西是否属于二十三种之一的)。
数据窗体的各种状态下可以提取出来的公共动作基本可以分为二大类,一是按钮单击,一个是界面可视控件状态切换。
按钮单击只是指“确定”、“取消”二个按钮,其他如“新增”,“修改”之类的按钮由于都是互斥的,我们没有必要放到状态里来做特殊的处理。界面切换又分为二大部分,一个是工具栏按钮可用性的切换,一个是数据绑定控件可编辑性的切换。
界面切换这一块其实并没有那么多的状态,只可以归为浏览与非浏览二种,无论是新增、修改、查询,在界面处理上没有什么大的区别,而初始只是一种特殊的浏览状态,删除比较特殊另行处理(删除时并没有界面的切换)。
鉴于各个状态会有一些公共的方法,这里没有用Interface来实现,而是用了Class的继承。
public class FrmState
上面的数据绑定控件不是.Net Framework自带的控件,而是新加了一些属性来标识这个控件所绑定的字段在新增或修改状态下是否有效,或是这个字段是否用于查询条件设置。只是很简单的扩展。
各个状态子类要做的只是重写一下btnOKClick方法。btnCancelClick方法目前只是一个空架子,因为这个方法并没有状态各异,所以动作直接放到窗体的取消按钮里。
子类只以修改状态为例:
public class EditState : FrmState
最后做一个状态管理的类让数据窗体来操作就行了。
public sealed class StateManager
在数据窗体上,只要根据需要调用一些Set***方法,然后适时的去btnOKClick,具体的可以参见上一篇。
相关文章推荐
- RFID会议签到系统总结(十九)――单数据窗体
- .net中窗体之间的数据交换总结
- 子线程如何获取和设置 或者控制窗口实时显示数据(网上的资料经个人整理拼凑总结)
- 数据库SQL语言语法总结6---数据控制
- 子线程如何获取和设置 或者控制窗口实时显示数据(网上的资料经个人整理拼凑总结)
- 使用GridView,在数据绑顶时控制每行命令按钮的Enalbe状态
- .net中窗体之间的数据交换总结
- .net中窗体之间的数据交换总结
- Android Multimedia框架总结(二十)MediaCodec状态周期及Codec与输入/输出Buffer过程(附实例)
- 数据在OSI七层模型中的各层传输的数据和控制信息的格式总结
- [置顶] Android Multimedia框架总结(二十)MediaCodec状态周期及Codec与输入/输出Buffer过程(附实例)
- Web页错误:对象的当前状态使该操作无效。 编码窗体数据无效
- 总结C#中窗体间传递数据的几种方法
- Oracle控制文件、数据文件、临时文件总结笔记
- php总结2——php中的变量、数据类型及转换、运算符、流程控制中的分支结构
- iPhone开发【二十】数据持久化总结之第1篇—NSUserDefaults
- oracle数据库中的内容全部丢失,只有RMAN的备份文件(包括数据,参数,控制文件),恢复数据库到备份状态
- 总结C#中窗体间传递数据的几种方法 (由别人的方法整理)
- easyui tree 根据后台返回的数据属性的值控制checkbox的选中状态(可不可用)
- RFID会议签到系统总结(八)――数据同步