企业管理软件开发架构之五 自定义控件开发
数据库中设计的表结构,它的定义如下
CREATE TABLE dbo.ADUSER ( RECNUM DECIMAL (28) IDENTITY NOT NULL, USERID NVARCHAR (10) CONSTRAINT DF__ADUSER__USERID__13F1F5EB DEFAULT ('') NOT NULL, USER_NAME NVARCHAR (50) CONSTRAINT DF__ADUSER__USER_NAM__14E61A24 DEFAULT ('') NOT NULL, PASSWORD NVARCHAR (32) NULL, USER_GROUP NVARCHAR (10) CONSTRAINT DF__ADUSER__USER_GRO__15DA3E5D DEFAULT ('') NOT NULL, SUSPENDED NVARCHAR (1) NULL, ...... }
对应于生成的业务实体,它的定义如下所示
有以下几个原因,需要重写控件来满足数据绑定的需要。
1 .NET自带的控件,大部分以字符串string的形式绑定数据,这会给非字符串类型的控件带来不方便。比如带小数的数据类型,带布尔值的数据类型。
2 为了减少界面层的重复代码。界面层中经常需要根据实体的属性来设置控件的对象状态。比如大小写状态,是否必须输入值,小数点位数。
下面的这段代码表达了这种需求,根据实体的附加属性,设置控件状态
Dictionary<string, string> fieldsCustProps = ComponentCommon.GetFieldsCustomProperties(entity, bindingInfo.BindingField); if (fieldsCustProps != null) { // handle caps lock property if (fieldsCustProps.ContainsKey("CapsLock")) { CharacterCasing = CharacterCasing.Upper; } // handle read only property if (fieldsCustProps.ContainsKey("ReadOnly")) { AlwaysReadOnly = true; } else if (fieldsCustProps.ContainsKey("AllowEditForNewOnly")) { _allowEditForNewOnly = true; } // handle hidden property if (fieldsCustProps.ContainsKey("Hidden")) { Visible = false; } // handle required property if (fieldsCustProps.ContainsKey("Required")) { _required = true; }
}
这样可以减少界面层中的重复代码。
3 部分控件有特殊的属性,必须要以重写来实现。比如经常遇到的lookup和drilldown。
查找(Lookup) :点击Customer No后面的小按钮,可以调出对话框,用来查找客户编号。
钻取(DrillDown): 当双击有下划线的文本框,比如Customer No时,它会跳转到客户主档,并打开对应的QSR的客户编号主档。
这两个特性,让功能与功能之间连接到一起,组成一个整体,相互引用和参考。日记帐引用主档的数据,查询引用日记帐的数据,让系统的可用性增色不少。
从基础的文本控件来看,如何重写它的功能以满足项目的需求。
[Designer(typeof(TextEditorDesigner))] public class TextEditor : Infragistics.Win.UltraWinEditors.UltraTextEditor, IEditor { private bool _isLayoutInitedFromBinding; private bool _isParentFormInited; private bool _isHidden; private bool _isInitializing; private bool _alwaysAllowEdit; private bool _alwaysReadOnly; private bool _allowEditForNewOnly; private bool _allowEdit; private bool _autoFind; private bool _hidden; private bool _required; private string _bindingField = string.Empty; ..... }
为什么不直接用.NET自带的TextBox呢?从上面的代码中可以看出一点头绪:
1 控件是否是必须输入的,这个功能.NET没有自带。对于必须输入值的控件,有的系统会在它的Label地方放一个星号,表示此控件项为必须输入,而重写之后,会在控件里面放一个红色箭头。
2 控件是否允许编辑 或是只允许新建立的时候编辑 有些数据项,比如销售单中的客户名称是从客户主档中带值过来,只能查看而不允许编辑。另一些数据项,比如销售单中的客户编码,在销售单保存后不再允许编辑。
3 是否允许控件查找值。如前面所讲述的,有些控件的值由其它主档数据带过来,则需要辅值查找。
4 与查找相同,有些控件需要查看它的主档属性,在控件中把值以下划线表示。双击值即可自动跳转到它的主档定义。
相关文章
- 电子电气架构——基于CANoe实现两路CAN线间网关仿真
- 服务化架构下企业的业务持续交付——云效平台持续交付实践
- 业务与信息系统深度融合,改变业务运营和创新模式:阿里巴巴企业级互联网架构(Aliware)实践
- 企业IT架构转型之道:阿里巴巴中台战略思想与架构实战. 2.1 回归SOA的本质——服务重用
- 企业IT架构转型之道:阿里巴巴中台战略思想与架构实战. 2.3 共享服务体系是培育业务创新的土壤
- 企业IT架构转型之道:阿里巴巴中台战略思想与架构实战. 2.4 赋予业务快速创新和试错能力
- 理解RESTful架构
- 《系统架构:复杂系统的产品设计与开发》——第1章,第1.4节本书结构
- 《企业大数据系统构建实战:技术、架构、实施与应用》一2.2 大数据职位构建体系
- 《企业大数据系统构建实战:技术、架构、实施与应用》一1.3 本章小结
- 《企业大数据系统构建实战:技术、架构、实施与应用》一导读
- CSDN日报191024:【1024特辑】带你掌握框架的灵魂;史上最全的MySQL高可用架构
- 私藏干货分享:关于企业架构中如何进行平台化
- ESB架构之企业实施案例
- 《企业大数据系统构建实战:技术、架构、实施与应用》——2.3 大数据制度和流程规范
- Kafka设计解析(六)- Kafka高性能架构之道
- 大数据平台Lambda架构详解
- 饿了么移动APP的架构演进
- 企业架构重组?会议管理服务商 DoubleDutch 裁员 25%
- 八年来我们到底经历了什么?——中间件专家带你“重走”双11高可用架构演进之路
- 系统架构设计师-论文模拟-模拟2-企业集成架构SOA
- SOA面向服务的架构
- kubernetes专题二:k8s架构