接下来的连续几篇,我们要演练作一个描述通用的二维表,并演示该二维表的继承通途。
先定义数据行的状态
开始定义数据行了
先定义数据行的状态
1
/// <summary>
2 /// 数据行的状态
3 /// </summary>
4 public enum RowState
5 {
6 /// <summary>
7 /// 新建状态
8 /// </summary>
9 Added,
10 /// <summary>
11 /// 删除状态
12 /// </summary>
13 Deleted,
14 /// <summary>
15 /// 修改状态
16 /// </summary>
17 Modified,
18 /// <summary>
19 /// 为止状态
20 /// </summary>
21 Unchanged
22 }
2 /// 数据行的状态
3 /// </summary>
4 public enum RowState
5 {
6 /// <summary>
7 /// 新建状态
8 /// </summary>
9 Added,
10 /// <summary>
11 /// 删除状态
12 /// </summary>
13 Deleted,
14 /// <summary>
15 /// 修改状态
16 /// </summary>
17 Modified,
18 /// <summary>
19 /// 为止状态
20 /// </summary>
21 Unchanged
22 }
开始定义数据行了
1
/// <summary>
2 /// 数据行
3 /// </summary>
4 public class Row
5 {
6 private object[] datas;
7 private System.Collections.ArrayList colNames;
8
9 /// <summary>
10 /// 该数据行所依赖的表的名称
11 /// </summary>
12 public readonly string TableName;
13 /// <summary>
14 /// 该数据行的状态
15 /// </summary>
16 public RowState RowState;
17
18
19 protected internal Row(ColumnCollection columns, string tableName)
20 {
21 datas = new object[columns.Count];
22 this.TableName = tableName;
23 colNames = new System.Collections.ArrayList();
24 foreach (Column col in columns)
25 {
26 colNames.Add(col.ColumnName);
27 }
28 }
29
30
31
32 /// <summary>
33 /// 获取或设置行的指定列的数据
34 /// </summary>
35 /// <param name="index">列的索引号,从0开始</param>
36 /// <returns>列中存储的数据</returns>
37 public object this[int index]
38 {
39 set
40 {
41 datas[index] = value;
42 this.RowState = RowState.Modified;
43 }
44 get
45 {
46 return datas[index];
47 }
48 }
49
50 /// <summary>
51 /// 获取或设置行的指定列的数据
52 /// </summary>
53 /// <param name="columnName">列的名称</param>
54 /// <returns>列中存储的数据</returns>
55 public object this[string columnName]
56 {
57 set
58 {
59 this[colNames.IndexOf(columnName)] = value;
60 }
61 get
62 {
63 return this[colNames.IndexOf(columnName)];
64 }
65 }
66
67
68 /// <summary>
69 /// 获取或设置行的全部数据
70 /// </summary>
71 public object[] ItemArray
72 {
73 get
74 {
75 return datas;
76 }
77 set
78 {
79 if (value.Length == datas.Length)
80 {
81 datas = value;
82 this.RowState = RowState.Modified;
83 }
84 }
85 }
86
87 /// <summary>
88 /// 将该行数据状态改为RowState.Unchanged
89 /// </summary>
90 public void AcceptChanges()
91 {
92 this.RowState = RowState.Unchanged;
93 }
94
95 /// <summary>
96 /// 为该行作删除标记
97 /// </summary>
98 public void Delete()
99 {
100 this.RowState = RowState.Deleted;
101 }
102
103 /// <summary>
104 /// 将该行的状态设置为RowState.Added
105 /// </summary>
106 public void SetAdded()
107 {
108 if (this.RowState == RowState.Unchanged)
109 {
110 this.RowState = RowState.Added;
111 }
112 }
113
114 /// <summary>
115 /// 将该行数据状态设置为RowState.Modified
116 /// </summary>
117 public void SetModified()
118 {
119 if (this.RowState == RowState.Unchanged || this.RowState == RowState.Added)
120 {
121 this.RowState = RowState.Modified;
122 }
123 }
124 }
2 /// 数据行
3 /// </summary>
4 public class Row
5 {
6 private object[] datas;
7 private System.Collections.ArrayList colNames;
8
9 /// <summary>
10 /// 该数据行所依赖的表的名称
11 /// </summary>
12 public readonly string TableName;
13 /// <summary>
14 /// 该数据行的状态
15 /// </summary>
16 public RowState RowState;
17
18
19 protected internal Row(ColumnCollection columns, string tableName)
20 {
21 datas = new object[columns.Count];
22 this.TableName = tableName;
23 colNames = new System.Collections.ArrayList();
24 foreach (Column col in columns)
25 {
26 colNames.Add(col.ColumnName);
27 }
28 }
29
30
31
32 /// <summary>
33 /// 获取或设置行的指定列的数据
34 /// </summary>
35 /// <param name="index">列的索引号,从0开始</param>
36 /// <returns>列中存储的数据</returns>
37 public object this[int index]
38 {
39 set
40 {
41 datas[index] = value;
42 this.RowState = RowState.Modified;
43 }
44 get
45 {
46 return datas[index];
47 }
48 }
49
50 /// <summary>
51 /// 获取或设置行的指定列的数据
52 /// </summary>
53 /// <param name="columnName">列的名称</param>
54 /// <returns>列中存储的数据</returns>
55 public object this[string columnName]
56 {
57 set
58 {
59 this[colNames.IndexOf(columnName)] = value;
60 }
61 get
62 {
63 return this[colNames.IndexOf(columnName)];
64 }
65 }
66
67
68 /// <summary>
69 /// 获取或设置行的全部数据
70 /// </summary>
71 public object[] ItemArray
72 {
73 get
74 {
75 return datas;
76 }
77 set
78 {
79 if (value.Length == datas.Length)
80 {
81 datas = value;
82 this.RowState = RowState.Modified;
83 }
84 }
85 }
86
87 /// <summary>
88 /// 将该行数据状态改为RowState.Unchanged
89 /// </summary>
90 public void AcceptChanges()
91 {
92 this.RowState = RowState.Unchanged;
93 }
94
95 /// <summary>
96 /// 为该行作删除标记
97 /// </summary>
98 public void Delete()
99 {
100 this.RowState = RowState.Deleted;
101 }
102
103 /// <summary>
104 /// 将该行的状态设置为RowState.Added
105 /// </summary>
106 public void SetAdded()
107 {
108 if (this.RowState == RowState.Unchanged)
109 {
110 this.RowState = RowState.Added;
111 }
112 }
113
114 /// <summary>
115 /// 将该行数据状态设置为RowState.Modified
116 /// </summary>
117 public void SetModified()
118 {
119 if (this.RowState == RowState.Unchanged || this.RowState == RowState.Added)
120 {
121 this.RowState = RowState.Modified;
122 }
123 }
124 }
本文转自shyleoking 51CTO博客,原文链接:http://blog.51cto.com/shyleoking/806273