创建字典
将字典内容绑定到ComboBox
cboCategory.InitializeValueListFromDictionary("DatabaseScript");
效果如下
在设计Windows 组件ComboBox时,根本没有考虑到数据字典的存在,没有InitializeValueListFromDictionary的实现。
随着系统的扩展,在业务系统中实现了数据字典功能,然而组件ComboBox对数据字典仍然一无所知。也就是,不能让ComboBox的实现依赖于数据字典功能,这样不利于扩展和维护。
在不改变代码的情况下,对一个组件进行扩展,添加新的方法,可以使用扩展方法
public static class ExtensionHelper
{
public static void InitializeValueListFromDictionary(this ComboBox combox, string dictionaryCode)
{
}
}
于是就实现了数据字典的功能。
继续应用数据字典到员工信息中,实现省份的绑定
cboProverince.InitializeValueListFromDictionary("Province");
SQL脚本如下
IF OBJECT_ID ('dbo.GBDICH') IS NOT NULL
DROP TABLE dbo.GBDICH
GO
CREATE TABLE dbo.GBDICH
(
NAME NVARCHAR (50) NOT NULL,
DESCRIPTION NVARCHAR (200) NULL,
SUSPENDED BIT NULL,
CONSTRAINT PK_GBDICH PRIMARY KEY (NAME)
)
GOIF OBJECT_ID ('dbo.GBDICD') IS NOT NULL
DROP TABLE dbo.GBDICD
GO
CREATE TABLE dbo.GBDICD
(
CODE_NAME NVARCHAR (50) NOT NULL,
NAME NVARCHAR (50) NULL,
DESCRIPTION NVARCHAR (200) NULL,
SUSPENDED BIT NULL,
CONSTRAINT PK_GBDICD PRIMARY KEY (CODE_NAME),
CONSTRAINT FK_GBDICD_GBDICD FOREIGN KEY (NAME) REFERENCES dbo.GBDICH (NAME)
)
GO
不变的数据字典 changeless
有一种类型的数据字典,它的值是不会发生改变的。比如消息的命令类型,只有三种,收,发和回复三种类型
public enum MessageFlowType
{
Outgoing = 0,
Incoming = 1,
Reply = 2,
}
再比如报表数据源,规定是应用数据库,框架数据库,或是自定义数据库
public enum ReportDataSource
{
CompanyDatabase = 0,
SystemDatabase = 1,
CustomDatabase = 2,
}
对于这种数据字典,直接以C#代码的方式编译到程序集中,并且在设计ComboBox组件时就要考虑绑定问题
public void InitializeValueListFromEnum(Type enumType, bool allowEmpty) { }