惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Help Net Security
Help Net Security
Recorded Future
Recorded Future
爱范儿
爱范儿
美团技术团队
博客园_首页
腾讯CDC
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
WordPress大学
WordPress大学
阮一峰的网络日志
阮一峰的网络日志
J
Java Code Geeks
T
Tailwind CSS Blog
雷峰网
雷峰网
V
V2EX
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
月光博客
月光博客
小众软件
小众软件
博客园 - 三生石上(FineUI控件)
人人都是产品经理
人人都是产品经理
酷 壳 – CoolShell
酷 壳 – CoolShell
L
LangChain Blog
量子位
Stack Overflow Blog
Stack Overflow Blog
Google DeepMind News
Google DeepMind News
博客园 - 司徒正美
V
Visual Studio Blog
罗磊的独立博客
Jina AI
Jina AI
宝玉的分享
宝玉的分享
C
CERT Recently Published Vulnerability Notes
Engineering at Meta
Engineering at Meta
S
SegmentFault 最新的问题
T
Threat Research - Cisco Blogs
F
Fortinet All Blogs
T
Tenable Blog
S
Securelist
D
DataBreaches.Net
P
Proofpoint News Feed
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Heimdal Security Blog
T
The Exploit Database - CXSecurity.com
S
Schneier on Security
Martin Fowler
Martin Fowler
W
WeLiveSecurity
MyScale Blog
MyScale Blog
The Cloudflare Blog
Security Latest
Security Latest
Hugging Face - Blog
Hugging Face - Blog
Scott Helme
Scott Helme
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Cloudbric
Cloudbric

博客园 - lichdr

高德地图热力图的Flutter实现 App消息推送的简单实现 nginx访问日志过滤(多条件) CAS的service参数验证 自定义Token的CAS登录 单元格的计算 表格行列的删除 表格行列的移动 FastReport的一些另类用法 FastReport分组页码 RFID会议签到系统总结(二十二)――系统中的模式 RFID会议签到系统总结(二十一)――服务端的通讯 RFID会议签到系统总结(十九)――单数据窗体 RFID会议签到系统总结(十八)――菜单与工具栏的加载 RFID会议签到系统总结(十七)――菜单与工具栏的改造(下) RFID会议签到系统总结(十六)――菜单与工具栏按钮的改造(上) RFID会议签到系统总结(十五)――管控端的窗体组织 RFID会议签到系统总结(十四)――管控端业务模块的加载 RFID会议签到系统总结(十三)――模块概述(下)
RFID会议签到系统总结(二十)――数据窗体状态控制
lichdr · 2007-07-26 · via 博客园 - lichdr

数据窗体的状态大概可以概括为以下几种,即初始、浏览、新增、修改、删除、查询(单数据窗体的查询是一种简单地基于当前表的查询,各个条件之间只能“与”运算,关系运算只有“等于”,当然字符串字段会有“like”)。在各种状态下,窗体的UI呈现是不相同的,而且在不同状态下,一些按钮的动作是各异的。比如“确定”按钮,在新增状态下按“确定”和在查询状态下按“确定”明显是不同的二种动作。上述的这些情况可以用GoF的状态模式来解决之(很奇怪,这个模式很多人不甚清楚,以前有几次出去面试的时候说到这个模式,对面的人居然问我这东西是否属于二十三种之一的)。

数据窗体的各种状态下可以提取出来的公共动作基本可以分为二大类,一是按钮单击,一个是界面可视控件状态切换。

按钮单击只是指“确定”、“取消”二个按钮,其他如“新增”,“修改”之类的按钮由于都是互斥的,我们没有必要放到状态里来做特殊的处理。界面切换又分为二大部分,一个是工具栏按钮可用性的切换,一个是数据绑定控件可编辑性的切换。

界面切换这一块其实并没有那么多的状态,只可以归为浏览与非浏览二种,无论是新增、修改、查询,在界面处理上没有什么大的区别,而初始只是一种特殊的浏览状态,删除比较特殊另行处理(删除时并没有界面的切换)。

鉴于各个状态会有一些公共的方法,这里没有用Interface来实现,而是用了Class的继承。

数据窗体状态的基类

上面的数据绑定控件不是.Net Framework自带的控件,而是新加了一些属性来标识这个控件所绑定的字段在新增或修改状态下是否有效,或是这个字段是否用于查询条件设置。只是很简单的扩展。

各个状态子类要做的只是重写一下btnOKClick方法。btnCancelClick方法目前只是一个空架子,因为这个方法并没有状态各异,所以动作直接放到窗体的取消按钮里。

子类只以修改状态为例:

修改状态

最后做一个状态管理的类让数据窗体来操作就行了。

窗体状态管理类

在数据窗体上,只要根据需要调用一些Set***方法,然后适时的去btnOKClick,具体的可以参见上一篇。