Table是怎样炼成的:Row、RowCollection

简介:
接下来的连续几篇,我们要演练作一个描述通用的二维表,并演示该二维表的继承通途。

先定义数据行的状态


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 }

开始定义数据行了

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 }




本文转自shyleoking 51CTO博客,原文链接:http://blog.51cto.com/shyleoking/806273

相关文章
|
5月前
table合并单元格 colspan(跨列)和rowspan(跨行)
table合并单元格 colspan(跨列)和rowspan(跨行)
|
6月前
|
数据库 OceanBase
使用 `INSERT INTO table_name SELECT * FROM table_name` 这种方式
使用 `INSERT INTO table_name SELECT * FROM table_name` 这种方式
45 1
|
前端开发
前端工作总结186-el-table问题
前端工作总结186-el-table问题
65 0
前端工作总结186-el-table问题
|
前端开发
前端工作总结270-el-table使用
前端工作总结270-el-table使用
79 0
|
JavaScript 前端开发 API
知道这个,再也不用写一堆el-table-column了
最近在写一个练手项目,接触到了一个问题,就是`el-table`中的项太多了,我写了一堆`el-table-column`,导致代码太长了,看起来特别费劲,后来发现了一个让人眼前一亮的方法,瞬间挽救了我的眼睛。 下面就来分享一下!
|
SQL 存储 关系型数据库
面试突击58:truncate、delete和drop的6大区别
面试突击58:truncate、delete和drop的6大区别
268 0
|
SQL 存储 关系型数据库
面试突击55:delete、drop、truncate有什么区别?
面试突击55:delete、drop、truncate有什么区别?
216 0
|
SQL Oracle 关系型数据库
flashback table肯定会造成rowid跟着修改
flashback table肯定会造成rowid跟着修改,为什么要开启行移动?
|
SQL Oracle 关系型数据库
跟着吕大师(VAGE)揭密隐含参数:_db_writer_coalesce_area_size
[size=13.913043975830078px]最近在看吕大师的大作《Oracle核心揭密》,这部大作可以与Jonathan Lewis大师的《Oracle Core_ Essential Internals for DBA》相提并论,看了几天收益颇多,哈哈美国有Lewis,中国有VAGE。
跟着吕大师(VAGE)揭密隐含参数:_db_writer_coalesce_area_size