决心从今天起开始写工作日志。可以对工作的总结和对人生感悟。很多年后,也许会是一笔厚厚的财富。
今天用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
绑定下拉控件#region 绑定下拉控件
126
/**//// <summary>
127
/// 绑定下拉控件
128
/// </summary>
129
/// <param name="ddl">下拉控件</param>
130
/// <param name="defaultText">默认项Text</param>
131
/// <param name="defaultValue">默认项value</param>
132
public void BindDDlControl(DropDownList ddl,string defaultText,string defaultValue)
133
{
134
this.BindDDlControl(ddl,defaultText,defaultValue,true);
135
}
136
137
/**//// <summary>
138
/// 绑定下拉控件
139
/// </summary>
140
/// <param name="ddl">下拉控件</param>
141
public void BindDDlControl(DropDownList ddl)
142
{
143
this.BindDDlControl(ddl,"","",false);
144
}
145
#endregion
146
147
绑定多选框列表#region 绑定多选框列表
148
public void BindChkControl(CheckBoxList chk)
149
{
150
this.BindDDlControl(chk,"","",false);
151
}
152
#endregion
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类型。