描述一个数据表
1
/**////<summary>
2
///描述一个数据表
3
///</summary>
4
publicclassTable
5

{
6
7
protectedTable(stringname,ColumnCollectioncols)
8

{
9
TableName=name;
10
Columns=cols;
11
Rows=newRowCollection();
12
}
13
14
/**////<summary>
15
///获取或设置表的列架构
16
///</summary>
17
protectedreadonlyColumnCollectionColumns;
18
/**////<summary>
19
///获取或设置表的数据行
20
///</summary>
21
protectedRowCollectionRows;
22
/**////<summary>
23
///获取或设置表的名称
24
///</summary>
25
protectedreadonlystringTableName;
26
27
/**////<summary>
28
///将该行数据状态改为RowState.Unchanged
29
///</summary>
30
protectedvoidAcceptChanges()
31

{
32
for(inti=0;i<=Rows.Count-1;i++)
33

{
34
Rows[i].AcceptChanges();
35
}
36
}
37
38
/**////<summary>
39
///移除所有数据行
40
///</summary>
41
protectedvoidClear()
42

{
43
this.Rows.Clear();
44
}
45
46
/**////<summary>
47
///返回状态匹配的数据行,并以新数据表的形式体现
48
///</summary>
49
///<paramname="rowState"></param>
50
///<returns></returns>
51
protectedTableGetChanges(RowStaterowState)
52

{
53
TabletmpTable=newTable(rowState.ToString(),this.Columns);
54
foreach(RowrowinRows)
55

{
56
if(row.RowState==rowState)
57

{
58
tmpTable.Rows.Add(row);
59
}
60
}
61
returntmpTable;
62
63
}
64
65
/**////<summary>
66
///依据现有的数据表的架构,生成新的数据行
67
///</summary>
68
///<returns></returns>
69
protectedRowNewRow()
70

{
71
returnnewRow(Columns,this.TableName);
72
}
73
74
/**////<summary>
75
///按关键字(数据行的第一列)匹配,并返回符合的数据行
76
///</summary>
77
///<paramname="filterKey"></param>
78
///<returns></returns>
79
protectedRow[]Select(stringfilterKey)
80

{
81
System.Collections.ArrayListtmpRows=newSystem.Collections.ArrayList();
82
foreach(RowrowinRows)
83

{
84
if(row[0].ToString()==filterKey)
85

{
86
tmpRows.Add(row);
87
}
88
}
89
return(Row[])tmpRows.ToArray(typeof(Row));
90
}
91
92
/**////<summary>
93
///打印Table的数据
94
///</summary>
95
publicvirtualvoidPrint()
96

{
97
System.Text.StringBuildersb=newStringBuilder();
98
99
foreach(Columncolinthis.Columns)
100

{
101
sb.AppendFormat("{0}/t",col.ColumnName);
102
}
103
sb.AppendLine();
104
System.Console.WriteLine(sb.ToString());
105
foreach(Rowrowinthis.Rows)
106

{
107
foreach(objectobjinrow.ItemArray)
108

{
109
System.Console.Write("{0}/t",obj);
110
}
111
System.Console.WriteLine();
112
}
113
}
114
}

/**////<summary>2
///描述一个数据表3
///</summary>4
publicclassTable5


{6

7
protectedTable(stringname,ColumnCollectioncols)8


{9
TableName=name;10
Columns=cols;11
Rows=newRowCollection();12
}13

14

/**////<summary>15
///获取或设置表的列架构16
///</summary>17
protectedreadonlyColumnCollectionColumns;18

/**////<summary>19
///获取或设置表的数据行20
///</summary>21
protectedRowCollectionRows;22

/**////<summary>23
///获取或设置表的名称24
///</summary>25
protectedreadonlystringTableName;26

27

/**////<summary>28
///将该行数据状态改为RowState.Unchanged29
///</summary>30
protectedvoidAcceptChanges()31


{32
for(inti=0;i<=Rows.Count-1;i++)33


{34
Rows[i].AcceptChanges();35
}36
}37

38

/**////<summary>39
///移除所有数据行40
///</summary>41
protectedvoidClear()42


{43
this.Rows.Clear();44
}45

46

/**////<summary>47
///返回状态匹配的数据行,并以新数据表的形式体现48
///</summary>49
///<paramname="rowState"></param>50
///<returns></returns>51
protectedTableGetChanges(RowStaterowState)52


{53
TabletmpTable=newTable(rowState.ToString(),this.Columns);54
foreach(RowrowinRows)55


{56
if(row.RowState==rowState)57


{58
tmpTable.Rows.Add(row);59
}60
}61
returntmpTable;62

63
}64

65

/**////<summary>66
///依据现有的数据表的架构,生成新的数据行67
///</summary>68
///<returns></returns>69
protectedRowNewRow()70


{71
returnnewRow(Columns,this.TableName);72
}73

74

/**////<summary>75
///按关键字(数据行的第一列)匹配,并返回符合的数据行76
///</summary>77
///<paramname="filterKey"></param>78
///<returns></returns>79
protectedRow[]Select(stringfilterKey)80


{81
System.Collections.ArrayListtmpRows=newSystem.Collections.ArrayList();82
foreach(RowrowinRows)83


{84
if(row[0].ToString()==filterKey)85


{86
tmpRows.Add(row);87
}88
}89
return(Row[])tmpRows.ToArray(typeof(Row));90
}91

92

/**////<summary>93
///打印Table的数据94
///</summary>95
publicvirtualvoidPrint()96


{97
System.Text.StringBuildersb=newStringBuilder();98

99
foreach(Columncolinthis.Columns)100


{101
sb.AppendFormat("{0}/t",col.ColumnName);102
}103
sb.AppendLine();104
System.Console.WriteLine(sb.ToString());105
foreach(Rowrowinthis.Rows)106


{107
foreach(objectobjinrow.ItemArray)108


{109
System.Console.Write("{0}/t",obj);110
}111
System.Console.WriteLine();112
}113
}114
}
好,到此Table所涉及的5个类都定义实现完毕了。
我们来回顾一下,Table中什么是最基础的,什么是最重要的?
按我们一般来看,表中最重要基础的实行,最重要的是数据。其实表最基础是的架构,架构就是列的定义,而行只不过是列的数据体现形式。
所以Table在构造的时候,必须先定义列的集合,而Row的构造函数是protected internal的,意义是不能在外面被构造,必须通过Table来依据列的定义来构造。
下篇,我们将看到我们对Table的继承,发挥更多OO体现。
本文介绍了一个表(Table)类的设计与实现,重点讲解了表的基本构成:列集合(ColumnCollection)和行集合(RowCollection),并提供了如添加新行、获取变化、清除数据等关键方法。
1284

被折叠的 条评论
为什么被折叠?



