創建字典
將字典內容綁定到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
有一種類型的數據字典,它的值是不會發生改變的。比如消息的命令類型,只有三種,收,發和回復三種類型
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) { }