决心从今天起开始写工作日志。可以对工作的总结和对人生感悟。很多年后,也许会是一笔厚厚的财富。
今天用C#实现了一个Collection类。放着现成.net类库中的Array,ArrayList,HashTable等等集合类不用,为什么要重写一个呢。
不知道大家有没有遇到这种情况。项目开发过程中会遇到状态,性别,某某类型等情况,显示给用户看的是文本,而存储在数据库中的是值。比如性别,可能有 男对应1,女对应0。怎么在程序中完成这种对应呢。
第一种采用系统参数的办法。专门为此建一个参数表。
第二种在程序中对这些 文本--值 的类型进行定义。虽然可以使用.net类库中数组或其他集合定义,但是将来使用这些定义时不方便。比如根据值获得文本,从数据库取得0,如何判断它对应的文本值女。或者是向下拉控件中绑定这些值。都不是很方便。
所以我定义了新的集合类TypeCollection。以下是代码。贴出来和大家切磋。
1
/// <summary>
2
/// 文本-值 类型的类
3
/// </summary>
4
public class Type
5
{
6
//构造函数
7
public Type(string strName,string strValue)
8
{
9
this._name=strName;
10
this._value=strValue;
11
}
12
13
public Type()
14
{
15
16
}
17
18
private string _name="";
19
private string _value="";
20
21
/// <summary>
22
/// 获取Type的文本
23
/// </summary>
24
public string Name
25
{
26
get{return this._name;}
27
}
28
29
/// <summary>
30
/// 获取Type的值
31
/// </summary>
32
public string Value
33
{
34
get{return this._value;}
35
}
36
}
37
38
/// <summary>
39
/// 用来存放 文本-值 类型的类的集合
40
/// </summary>
41
public class TypeCollection
42
{
43
private DataTable dt=null;
44
public const string NameField="Name";
45
public const string ValueField="Value";
46
47
public TypeCollection()
48
{
49
dt=new DataTable();
50
dt.Columns.Add(NameField);
51
dt.Columns.Add(ValueField);
52
}
53
54
public TypeCollection(string[,] listItem)
55
{
56
dt=new DataTable();
57
dt.Columns.Add(NameField);
58
dt.Columns.Add(ValueField);
59
60
if(listItem.Length>0)
61
{
62
//获取一维个数
63
int count=listItem.Length/listItem.Rank;
64
for(int i=0;i<count;i++)
65
{
66
dt.Rows.Add(new object[]{listItem[i,0],listItem[i,1]});
67
}
68
}
69
}
70
71
/// <summary>
72
/// 获取TypeCollection中item
73
/// </summary>
74
/// <param name="strValue">item的值</param>
75
/// <returns></returns>
76
public Type GetItemByValue(string strValue)
77
{
78
DataRow[] rows=dt.Select(string.Format("Value='{0}'",strValue.Trim()));
79
80
if(rows!=null&&rows.Length>0)
81
{
82
return new Type(rows[0].ToString(),rows[1].ToString());
83
}
84
else
85
{
86
return null;
87
}
88
}
89
90
/// <summary>
91
/// 返回TypeCollection的DataTable
92
/// </summary>
93
/// <returns></returns>
94
public DataTable GetTypeAsDataTable()
95
{
96
return dt;
97
}
98
99
/// <summary>
100
/// 绑定列表控件
101
/// </summary>
102
/// <param name="ddl">列表控件</param>
103
/// <param name="defaultText">默认项Text</param>
104
/// <param name="defaultValue">默认项value</param>
105
/// <param name="exitDefault">是否要默认项</param>
106
private void BindDDlControl(ListControl objControl,string defaultText,string defaultValue,bool exitDefault)
107
{
108
if(dt!=null&&dt.Rows.Count>0)
109
{
110
objControl.Items.Clear();
111
112
//添加默认项
113
if(exitDefault)
114
{
115
objControl.Items.Add(new ListItem(defaultText,defaultValue));
116
}
117
//绑定数据
118
foreach(DataRow row in dt.Rows)
119
{
120
objControl.Items.Add(new ListItem(row[0].ToString().Trim(),row[1].ToString().Trim()));
121
}
122
}
123
}
124
125
绑定下拉控件
146
147
绑定多选框列表
153
}
154
155
/// <summary>
156
/// 性别
157
/// </summary>
158
public static TypeCollection tcOrderType=new TypeCollection(new string[,]{{"男","1"},{"女","0"}});

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

146

147

153

154

155

156

157

158

这个集合类可以方便实现
1,文本--值类型的定义
2,根据值查找文本
3,向控件绑定更方便。
尤其是定义大量的类型时。
总结:1,可以通过自己对.net类库的灵活使用 ,实现更多的功能。
2,多态的应用。对于多选框和下拉框,都是ListControl控件。参数声明直接声明为基类型。
3, 对面向对象的深入理解。具有相同行为和属性的一组对象,可以抽象为类。定义统一的方法和属性。比如本例中的Type和TypeCollection类型。