zoukankan      html  css  js  c++  java
  • Table是怎样炼成的:Table

    描述一个数据表

      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体现。

  • 相关阅读:
    路径变量@PathVariable/请求参数@RequestParam的绑定以及@RequestBody
    JSR303后端校验详细笔记
    创建ssm项目步骤
    利用 R 绘制拟合曲线
    在 Linux 中将 Caps 根据是否为修饰键分别映射到 esc 和 Ctrl
    Master Transcription Factors and Mediator Establish Super-Enhancers at Key Cell Identity Genes
    Genomic Evidence for Complex Domestication History of the Cultivated Tomato in Latin America
    Variation Revealed by SNP Genotyping and Morphology Provides Insight into the Origin of the Tomato
    The genetic, developmental, and molecular bases of fruit size and shape variation in tomato
    微信支付jsapi
  • 原文地址:https://www.cnblogs.com/shyleoking/p/649817.html
Copyright © 2011-2022 走看看