进销存项目中实现数据字典

创建字典

clip_image002

将字典内容绑定到ComboBox

cboCategory.InitializeValueListFromDictionary("DatabaseScript");

效果如下

clip_image003

在设计Windows 组件ComboBox时,根本没有考虑到数据字典的存在,没有InitializeValueListFromDictionary的实现。

随着系统的扩展,在业务系统中实现了数据字典功能,然而组件ComboBox对数据字典仍然一无所知。也就是,不能让ComboBox的实现依赖于数据字典功能,这样不利于扩展和维护。

在不改变代码的情况下,对一个组件进行扩展,添加新的方法,可以使用扩展方法

public static class ExtensionHelper

{

public static void InitializeValueListFromDictionary(this ComboBox combox, string dictionaryCode)

{

}

}

于是就实现了数据字典的功能。

继续应用数据字典到员工信息中,实现省份的绑定

cboProverince.InitializeValueListFromDictionary("Province");

clip_image004

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) { }

原文地址:https://www.cnblogs.com/JamesLi2015/p/2088879.html