博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
企业管理软件开发架构之五 自定义控件开发
阅读量:6496 次
发布时间:2019-06-24

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

数据库中设计的表结构,它的定义如下

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
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的客户编号主档。

image_thumb9

这两个特性,让功能与功能之间连接到一起,组成一个整体,相互引用和参考。日记帐引用主档的数据,查询引用日记帐的数据,让系统的可用性增色不少。

 

从基础的文本控件来看,如何重写它的功能以满足项目的需求。

[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  与查找相同,有些控件需要查看它的主档属性,在控件中把值以下划线表示。双击值即可自动跳转到它的主档定义。

转载地址:http://ydcyo.baihongyu.com/

你可能感兴趣的文章
mysql开启远程连接权限
查看>>
关于商米D1S,USB默认权限在关机后丢失的FAQ
查看>>
css3 text-transform变形动画
查看>>
scikit-learn中文api
查看>>
迭代器和生成器
查看>>
Vue 组件之间传值
查看>>
指向方法之委托(一)
查看>>
2013 Multi-University Training Contest 3 部分解题报告
查看>>
Linux 网桥配置命令:brctl
查看>>
jQuery中异步操作对象Deferred
查看>>
MVC设计模式
查看>>
在团队项目遇到的问题及解决方法。
查看>>
springcloud demo---config-client
查看>>
Java LeetCode 1.Two Sum
查看>>
前端面试题:css相关面试题
查看>>
最长回文子序列-----动态规划
查看>>
Vue国际化实现
查看>>
设计模式:单例模式
查看>>
FLASH位宽为8、16、32时,CPU与外设之间地址线的连接方法
查看>>
双网卡一般情况不能有两个网关 (转)
查看>>