在项目中经常用到DataTable,如果DataTable使用得当,不仅能使程序简洁实用,而且能够提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结。

一、DataTable简介

(1)构造函数 
          DataTable()   不带参数初始化DataTable 类的新实例。 
          DataTable(string tableName)  用指定的表名初始化DataTable 类的新实例。 
          DataTable(string tableName, string tableNamespace) 用指定的表名和命名空间初始化DataTable 类的新实例。 
          (2) 常用属性 
          CaseSensitive    指示表中的字符串比较是否区分大小写。 
          ChildRelations   获取此DataTable 的子关系的集合。 
          Columns             获取属于该表的列的集合。 
          Constraints        获取由该表维护的约束的集合。 
          DataSet               获取此表所属的DataSet。DataSet相关信息,可见我以前的一篇文章《数据访问(2)-DataSet》 
          DefaultView       获取可能包括筛选视图或游标位置的表的自定义视图。 
          HasErrors          获取一个值,该值指示该表所属的DataSet 的任何表的任何行中是否有错误。 
          MinimumCapacity  获取或设置该表最初的起始大小。该表中行的最初起始大小。默认值为 50。 
          Rows                  获取属于该表的行的集合。 
          TableName       获取或设置DataTable 的名称。

(3)常用方法 
          AcceptChanges()   提交自上次调用AcceptChanges() 以来对该表进行的所有更改。 
          BeginInit()         开始初始化在窗体上使用或由另一个组件使用的DataTable。初始化发生在运行时。

Clear()               清除所有数据的DataTable。 
          Clone()              克隆DataTable 的结构,包括所有DataTable 架构和约束。 
          EndInit()            结束在窗体上使用或由另一个组件使用的DataTable 的初始化。初始化发生在运行时。 
          ImportRow(DataRow row)    将DataRow 复制到DataTable 中,保留任何属性设置以及初始值和当前值。 
          Merge(DataTable table)  将指定的DataTable 与当前的DataTable 合并。 
          NewRow()         创建与该表具有相同架构的新DataRow。
 
        二、DataTable使用技巧

(1)Create a DataTable
         DataTable dt = new DataTable("Table_AX");

(2)Add columns for DataTable
        //Method 1
        dt.Columns.Add("column0", System.Type.GetType("System.String"));
        //Method 2
        DataColumn dc = new DataColumn("column1", System.Type.GetType("System.Boolean"));
        dt.Columns.Add(dc);

(3)Add rows for DataTable
         //Initialize the row
         DataRow dr = dt.NewRow();
         dr["column0"] = "AX";
         dr["column1"] = true;
         dt.Rows.Add(dr);
         //Doesn't initialize the row
         DataRow dr1 = dt.NewRow();
         dt.Rows.Add(dr1);

(4)Select row
         //Search the second row 如果没有赋值,则用is null来select
         DataRow[] drs = dt.Select("column1 is null");
         DataRow[] drss = dt.Select("column0 = 'AX'");

(5)Copy DataTable include data
         DataTable dtNew = dt.Copy();

(6)Copy DataTable only scheme
         DataTable dtOnlyScheme = dt.Clone();

(7)Operate one row
         //对dt的操作
         //Method 1
         DataRow drOperate = dt.Rows[0];
         drOperate["column0"] = "AXzhz";
         drOperate["column1"] = false;
         //Method 2
         drOperate[0] = "AXzhz";
         drOperate[1] = false;
         //Method 3
         dt.Rows[0]["column0"] = "AXzhz";
         dt.Rows[0]["column1"] = false;
         //Method 4
         dt.Rows[0][0] = "AXzhz";
         dt.Rows[0][1] = false;

(8)Evaluate another DataTable's row to current Datatable
         dtOnlyScheme.Rows.Add(dt.Rows[0].ItemArray);

(9)Convert to string
         System.IO.StringWriter sw = new System.IO.StringWriter();
         System.Xml.XmlTextWriter xw = new System.Xml.XmlTextWriter(sw);
         dt.WriteXml(xw);
         string s = sw.ToString();

(10)Filter DataTable
         dt.DefaultView.RowFilter = "column1 <> true";
         dt.DefaultView.RowFilter = "column1 = true";

(11)Sort row
          dt.DefaultView.Sort = "ID ,Name ASC";
          dt=dt.DefaultView.ToTable();

(12)Bind DataTable
           //绑定的其实是DefaultView
          gvTestDataTable.DataSource = dt;
          gvTestDataTable.DataBind();

(13)judge the DataTable’s Column name is a string
          //判断一个字符串是否为DataTable的列名
         dtInfo.Columns.Contains("AX");

(14)DataTable convert to XML and XML convert to DataTable
          protected void Page_Load(object sender, EventArgs e)
          {
             DataTable dt_AX = new DataTable();
             //dt_AX.Columns.Add("Sex", typeof(System.Boolean));
             //DataRow dr = dt_AX.NewRow();
             //dr["Sex"] = true;
             //dt_AX.Rows.Add(dr);
             string xml=ConvertBetweenDataTableAndXML_AX(dt_AX);
             DataTable dt = ConvertBetweenDataTableAndXML_AX(xml);
         }
         public string ConvertBetweenDataTableAndXML_AX(DataTable dtNeedCoveret)
        {
             System.IO.TextWriter tw = new System.IO.StringWriter();
             //if TableName is empty, WriteXml() will throw Exception.

dtNeedCoveret.TableName=dtNeedCoveret.TableName.Length==0?"Table_AX":dtNeedCoveret.TableName;
             dtNeedCoveret.WriteXml(tw);
             dtNeedCoveret.WriteXmlSchema(tw);
             return tw.ToString();
        }
         public DataTable ConvertBetweenDataTableAndXML_AX(string xml)
        {
             System.IO.TextReader trDataTable = new System.IO.StringReader(xml.Substring(0, xml.IndexOf("<?xml")));
             System.IO.TextReader trSchema = new System.IO.StringReader(xml.Substring(xml.IndexOf("<?xml")));
             DataTable dtReturn = new DataTable();
             dtReturn.ReadXmlSchema(trSchema);
             dtReturn.ReadXml(trDataTable);
             return dtReturn;
        }

C# 中 DataTable 使用详解。的更多相关文章

  1. php中关于引用(&)详解

    php中关于引用(&)详解 php的引用(就是在变量或者函数.对象等前面加上&符号) 在PHP 中引用的意思是:不同的变量名访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的 ...

  2. JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解

    二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...

  3. AngularJS select中ngOptions用法详解

    AngularJS select中ngOptions用法详解   一.用法 ngOption针对不同类型的数据源有不同的用法,主要体现在数组和对象上. 数组: label for value in a ...

  4. 【转载】C/C++中extern关键字详解

    1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern ...

  5. oracle中imp命令详解 .

    转自http://www.cnblogs.com/songdavid/articles/2435439.html oracle中imp命令详解 Oracle的导入实用程序(Import utility ...

  6. Android中Service(服务)详解

    http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...

  7. python中threading模块详解(一)

    python中threading模块详解(一) 来源 http://blog.chinaunix.net/uid-27571599-id-3484048.html threading提供了一个比thr ...

  8. Android中mesure过程详解

    我们在编写layout的xml文件时会碰到layout_width和layout_height两个属性,对于这两个属性我们有三种选择:赋值成具体的数值,match_parent或者wrap_conte ...

  9. Android中Intent组件详解

    Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件.Intent本身是定义为一个类别(Class),一个Intent对象表达一个目的(Goal)或期望(Expectation),叙 ...

随机推荐

  1. php 页面 不显示任何错误提示

    error_reporting(0); ini_set('html_errors',false); ini_set('display_errors',false);

  2. 《Android应用性能优化》3——电量、渲染

    7.延长电池续航时间 尽管应用有时看起来没做多少事,但实际上可能会很耗电,运行不了多久就会把电量榨干,使设备开机不到半天就没电了.那些被归为“电池杀手”的应用,最终的宿命就是被删除.得差评.不挣钱.因 ...

  3. 《Mysql技术内幕,Innodb存储引擎》——索引与算法

    B+树 B+树中,所有记录节点都按照键值的大小顺序放在同一层叶子节点,各个叶子节点指针进行连接. 图中指针是单向的,但是书上的图是双向的,而且旋转应该也是双向才能完成) B+树插入处理 Leaf Pa ...

  4. Java虚拟机(三):JVM垃圾回收机制

    概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计数器.虚拟机栈.本地方 ...

  5. 机器学习-KNN算法

    原理 KNN算法,又叫K近邻算法.就是在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K个数据,则该测试数据对应的类别就是 ...

  6. mongodb二进制安装与yum安装

    一.什么是mongodb MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种.MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当 ...

  7. paxos协议更新日志

    基于Paxos协议的数据同步与传统主备方式最大的区别在与Paxos只需任意超过半数的副本在线且相互通信正常,就可以保证服务的持续可用,且数据不丢失. Basic paxos协议更新日志 我们将数据持久 ...

  8. 玩转mongodb(二):mongodb基础知识

    常用基本数据类型: null null用于表示空值或者不存在的字段: {"data":null} 布尔型 布尔类型只有两个值,true和false: {"data&quo ...

  9. nodejs --- 上传文件并保存到磁盘

    先复习下整个请求的过程 const express = require('express'); const static = require('express-static'); const cook ...

  10. 阿里云搭建hadoop集群服务器,内网、外网访问问题(详解。。。)

    这个问题花费了我将近两天的时间,经过多次试错和尝试,现在想分享给大家来解决此问题避免大家入坑,以前都是在局域网上搭建的hadoop集群,并且是局域网访问的,没遇见此问题. 因为阿里云上搭建的hadoo ...