一个自定义Collection类的实现(C#) 第一篇工作日志
决心从今天起开始写工作日志。可以对工作的总结和对人生感悟。很多年后,也许会是一笔厚厚的财富。
今天用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"}});
/// <summary>2
/// 文本-值 类型的类3
/// </summary>4
public class Type5
{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 Name25
{26
get{return this._name;}27
}28

29
/// <summary>30
/// 获取Type的值31
/// </summary>32
public string Value33
{34
get{return this._value;}35
}36
}37

38
/// <summary>39
/// 用来存放 文本-值 类型的类的集合40
/// </summary>41
public class TypeCollection42
{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中item73
/// </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
else85
{86
return null;87
}88
}89

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


浙公网安备 33010602011771号