安忍不动如大地,静虑深思如秘藏
雄鹰虽然有时候飞的比鸡还低 但鸡永远也不可能飞到鹰的高度
描述一个数据表

  1    /// <summary>
  2    /// 描述一个数据表
  3    /// </summary>

  4    public class Table
  5    {
  6
  7        protected Table(string name, ColumnCollection cols)
  8        {
  9            TableName = name;
 10            Columns = cols;
 11            Rows = new RowCollection();
 12        }

 13
 14        /// <summary>
 15        /// 获取或设置表的列架构
 16        /// </summary>

 17        protected readonly ColumnCollection Columns;
 18        /// <summary>
 19        /// 获取或设置表的数据行
 20        /// </summary>

 21        protected RowCollection Rows;
 22        /// <summary>
 23        /// 获取或设置表的名称
 24        /// </summary>

 25        protected readonly string TableName;
 26
 27        /// <summary>
 28        /// 将该行数据状态改为RowState.Unchanged
 29        /// </summary>

 30        protected void AcceptChanges()
 31        {
 32            for (int i = 0; i <= Rows.Count - 1; i++)
 33            {
 34                Rows[i].AcceptChanges();
 35            }

 36        }

 37
 38        /// <summary>
 39        /// 移除所有数据行
 40        /// </summary>

 41        protected void Clear()
 42        {
 43            this.Rows.Clear();
 44        }

 45
 46        /// <summary>
 47        /// 返回状态匹配的数据行,并以新数据表的形式体现
 48        /// </summary>
 49        /// <param name="rowState"></param>
 50        /// <returns></returns>

 51        protected Table GetChanges(RowState rowState)
 52        {
 53            Table tmpTable = new Table(rowState.ToString(), this.Columns);
 54            foreach (Row row in Rows)
 55            {
 56                if (row.RowState == rowState)
 57                {
 58                    tmpTable.Rows.Add(row);
 59                }

 60            }

 61            return tmpTable;
 62
 63        }

 64
 65        /// <summary>
 66        /// 依据现有的数据表的架构,生成新的数据行
 67        /// </summary>
 68        /// <returns></returns>

 69        protected Row NewRow()
 70        {
 71            return new Row(Columns, this.TableName);
 72        }

 73
 74        /// <summary>
 75        /// 按关键字(数据行的第一列)匹配,并返回符合的数据行
 76        /// </summary>
 77        /// <param name="filterKey"></param>
 78        /// <returns></returns>

 79        protected Row[] Select(string filterKey)
 80        {
 81            System.Collections.ArrayList tmpRows = new System.Collections.ArrayList();
 82            foreach (Row row in Rows)
 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        public virtual void Print()
 96        {
 97            System.Text.StringBuilder sb = new StringBuilder();
 98
 99            foreach (Column col in this.Columns)
100            {
101                sb.AppendFormat("{0}\t", col.ColumnName);
102            }

103            sb.AppendLine();
104            System.Console.WriteLine(sb.ToString());
105            foreach (Row row in this.Rows)
106            {
107                foreach (object obj in row.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体现。

posted on 2007-02-13 22:56  害羞的狮子王  阅读(374)  评论(0编辑  收藏  举报