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

一、DataTable简介

(1)构造函数

Ø         DataTable()不带参数初始化DataTable类的新实例。

Ø         DataTable(stringtableName)用指定的表名初始化DataTable类的新实例。

Ø         DataTable(stringtableName,stringtableNamespace)用指定的表名和命名空间初始化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(DataRowrow)将DataRow复制到DataTable中,保留任何属性设置以及初始值和当前值。

Ø         Merge(DataTabletable)将指定的DataTable与当前的DataTable合并。

Ø         NewRow()创建与该表具有相同架构的新DataRow。

二、DataTable使用技巧

(1)CreateaDataTable

DataTabledt=newDataTable("Table_AX");

(2)AddcolumnsforDataTable

//Method1

dt.Columns.Add("column0",System.Type.GetType("System.String"));

//Method2

DataColumndc=newDataColumn("column1",System.Type.GetType("System.Boolean"));

dt.Columns.Add(dc);

(3)AddrowsforDataTable

//Initializetherow

DataRowdr=dt.NewRow();

dr["column0"]="AX";

dr["column1"]=true;

dt.Rows.Add(dr);

//Doesn'tinitializetherow

DataRowdr1=dt.NewRow();

dt.Rows.Add(dr1);

(4)Selectrow

//Searchthesecondrow如果没有赋值,则用isnull来select

DataRow[]drs=dt.Select("column1isnull");

DataRow[]drss=dt.Select("column0='AX'");

(5)CopyDataTableincludedata

DataTabledtNew=dt.Copy();

(6)CopyDataTableonlyscheme

DataTabledtOnlyScheme=dt.Clone();

(7)Operateonerow

//对dt的操作

//Method1

DataRowdrOperate=dt.Rows[0];

drOperate["column0"]="AXzhz";

drOperate["column1"]=false;

//Method2

drOperate[0]="AXzhz";

drOperate[1]=false;

//Method3

dt.Rows[0]["column0"]="AXzhz";

dt.Rows[0]["column1"]=false;

//Method4

dt.Rows[0][0]="AXzhz";

dt.Rows[0][1]=false;

(8)EvaluateanotherDataTable'srowtocurrentDatatable

dtOnlyScheme.Rows.Add(dt.Rows[0].ItemArray);

(9)Converttostring

System.IO.StringWritersw=newSystem.IO.StringWriter();

System.Xml.XmlTextWriterxw=newSystem.Xml.XmlTextWriter(sw);

dt.WriteXml(xw);

strings=sw.ToString();

(10)FilterDataTable

dt.DefaultView.RowFilter="column1<>true";

dt.DefaultView.RowFilter="column1=true";

(11)Sortrow

dt.DefaultView.Sort="ID,NameASC";

dt=dt.DefaultView.ToTable();

(12)BindDataTable

//绑定的其实是DefaultView

gvTestDataTable.DataSource=dt;

gvTestDataTable.DataBind();

(13)judgetheDataTable’sColumnnameisastring

//判断一个字符串是否为DataTable的列名

dtInfo.Columns.Contains("AX");

(14)DataTableconverttoXMLandXMLconverttoDataTable

protectedvoidPage_Load(objectsender,EventArgse)

DataTabledt_AX=newDataTable();

//dt_AX.Columns.Add("Sex",typeof(System.Boolean));

//DataRowdr=dt_AX.NewRow();

//dr["Sex"]=true;

//dt_AX.Rows.Add(dr);

stringxml=ConvertBetweenDataTableAndXML_AX(dt_AX);

DataTabledt=ConvertBetweenDataTableAndXML_AX(xml);

}

publicstringConvertBetweenDataTableAndXML_AX(DataTabledtNeedCoveret)

{

System.IO.TextWritertw=newSystem.IO.StringWriter();

//ifTableNameisempty,WriteXml()willthrowException.

dtNeedCoveret.TableName=dtNeedCoveret.TableName.Length==0?"Table_AX":dtNeedCoveret.TableName;

dtNeedCoveret.WriteXml(tw);

dtNeedCoveret.WriteXmlSchema(tw);

returntw.ToString();

}

publicDataTableConvertBetweenDataTableAndXML_AX(stringxml)

{

System.IO.TextReadertrDataTable=newSystem.IO.StringReader(xml.Substring(0,xml.IndexOf("<?xml")));

System.IO.TextReadertrSchema=newSystem.IO.StringReader(xml.Substring(xml.IndexOf("<?xml")));

DataTabledtReturn=newDataTable();

dtReturn.ReadXmlSchema(trSchema);

dtReturn.ReadXml(trDataTable);

returndtReturn;

}

C#中DataTable使用技巧的更多相关文章

  1. DataTable使用技巧总结【转】

    一.DataTable简介 ()构造函数 DataTable() 不带参数初始化DataTable 类的新实例. DataTable(string tableName) 用指定的表名初始化DataTa ...

  2. (转载)DataTable使用技巧总结

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

  3. C# 中 DataTable 使用详解。

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

  4. ios开发中的小技巧

    在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIViewal ...

  5. C#中DataTable中的Compute方法使用收集

    原文: C#中DataTable中的Compute方法使用收集 Compute函数的参数就两个:Expression,和Filter. Expresstion是计算表达式,关于Expression的详 ...

  6. 背水一战 Windows 10 (21) - 绑定: x:Bind 绑定, x:Bind 绑定之 x:Phase, 使用绑定过程中的一些技巧

    [源码下载] 背水一战 Windows 10 (21) - 绑定: x:Bind 绑定, x:Bind 绑定之 x:Phase, 使用绑定过程中的一些技巧 作者:webabcd 介绍背水一战 Wind ...

  7. 绑定: x:Bind 绑定, x:Bind 绑定之 x:Phase, 使用绑定过程中的一些技巧

    背水一战 Windows 10 之 绑定 x:Bind 绑定 x:Bind 绑定之 x:Phase 使用绑定过程中的一些技巧 示例1.演示 x:Bind 绑定的相关知识点Bind/BindDemo.x ...

  8. C#中DataTable排序、检索、合并等操作实例

    转载引用至:http://www.jb51.net/article/49222.htm     一.排序1.获取DataTable的默认视图2.对视图设置排序表达式3.用排序后的视图导出的新DataT ...

  9. iOS开发中调试小技巧

    对于软件开发而言,调试是必须学会的技能,重要性不言而喻.对于调试的技能,基本上是可以迁移的,也就是说你以前在其他平台上掌握的很多调试技巧,很多也是可以用在iOS开发中.不同语言.不同IDE.不同平台的 ...

随机推荐

  1. [BZOJ1163][BZOJ1339][Baltic2008]Mafia

    [BZOJ1163][BZOJ1339][Baltic2008]Mafia 试题描述 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控. 对于每个车站进行布控都需要一定的代价,现在警方希望使用 ...

  2. Redis快速入门

    Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMware主 ...

  3. 【云计算】基于Ansible的自动部署平台化思路

    目标: 1.自动化—支持命令行.webui.api调用 2.支持基础命令.脚本.复杂任务编排.满足生产环境各类模块自动化部署需求 3.满足生产环境(开发.测试.线上)性能.可靠性.安全性要求 4.流程 ...

  4. 在windows下用cygwin和eclipse搭建cocos2dx的android开发环境

    在windows下用cygwin和eclipse搭建cocos2dx(2.1.4)的android开发环境,2013-8-1更新. 一.准备工作 需要下载和安装以下内容,请根据自己的操作系统选择x86 ...

  5. 转载一篇关于ios静态库的文章

    http://blog.csdn.net/zsomsom/article/details/9163635

  6. Android 中PendingIntent---附带解决AlarmManager重复加入问题

    最近在程序中使用到了notification功能,自然,就涉及到了PendingIntent,下面总结下. 1 什么是PendingIntent A description of an Intent ...

  7. Greedy:Saruman's Army(POJ 3069)

    2015-09-06 萨鲁曼军队 问题大意:萨鲁曼白想要让他的军队从sengard到Helm’s Deep,为了跟踪他的军队,他在军队中放置了魔法石(军队是一条线),魔法石可以看到前后距离为R的距离, ...

  8. Gym 100801E Easy Arithmetic (思维题)

    题目:传送门.(需要下载PDF) 题意:给定一个长度不超过1000的字符串表达式,向该表达式中加入'+'或'-',使得表达式的值最大,输出该表达式. 题解:比如300-456就改成300-4+56,遇 ...

  9. Auguse 2nd, Week 32nd Tuesday, 2016

    Love me little and love me long.不求情意绵绵,但愿天长地久. Friends are relatives you make for yourself.朋友是你自己结交的 ...

  10. backslash and newline separated by space

    原来是因为\  后面多了一个空格 检查写的代码中将\后面的空格去掉就可以了.