http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 6571|回复: 5

[Asp.Net] C# DataTable的详细用法

[复制链接]
发表于 2012-10-10 13:02:39 | 显示全部楼层 |阅读模式
在项目中经常用到DataTable,如果DataTable使用得当,不仅能使程序简洁实用,而且能够提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结。
一、DataTable简介    
1.构造函数
[C#] 纯文本查看 复制代码
     DataTable()   不带参数初始化DataTable 类的新实例。 
          DataTable(string tableName)  用指定的表名初始化DataTable 类的新实例。 
          DataTable(string tableName, string tableNamespace) 用指定的表名和命名空间初始化DataTable 类的新实例。

2. 常用属性
[C#] 纯文本查看 复制代码
CaseSensitive    指示表中的字符串比较是否区分大小写。 
          ChildRelations   获取此DataTable 的子关系的集合。 
          Columns             获取属于该表的列的集合。 
          Constraints        获取由该表维护的约束的集合。 
          DataSet               获取此表所属的DataSet。DataSet相关信息,可见我以前的一篇文章《数据访问(2)-DataSet》 
          DefaultView       获取可能包括筛选视图或游标位置的表的自定义视图。 
          HasErrors          获取一个值,该值指示该表所属的DataSet 的任何表的任何行中是否有错误。 
          MinimumCapacity  获取或设置该表最初的起始大小。该表中行的最初起始大小。默认值为 50。 
          Rows                  获取属于该表的行的集合。 
          TableName       获取或设置DataTable 的名称。
3.常用方法
[C#] 纯文本查看 复制代码
 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    
[C#] 纯文本查看 复制代码
DataTable dt = new DataTable("Table_AX");
2.Add columns for DataTable 添加列
[C#] 纯文本查看 复制代码
 //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 添加行
[C#] 纯文本查看 复制代码
//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 查询行
[C#] 纯文本查看 复制代码
//Search the second row 如果没有赋值,则用is null来select[/align]         DataRow[] drs = dt.Select("column1 is null");
         DataRow[] drss = dt.Select("column0 = 'AX'");
5.Copy DataTable include data 复制数据
[C#] 纯文本查看 复制代码
DataTable dtNew = dt.Copy(); 

6.Copy DataTable only scheme 复制表结构
  
[C#] 纯文本查看 复制代码
 DataTable dtOnlyScheme = dt.Clone();

7.Operate one row设置行数据
[C#] 纯文本查看 复制代码
//对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 添加行
        
[C#] 纯文本查看 复制代码
dtOnlyScheme.Rows.Add(dt.Rows[0].ItemArray);

9.Convert to string
      
[C#] 纯文本查看 复制代码
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
     
[C#] 纯文本查看 复制代码
dt.DefaultView.RowFilter = "column1 <> true";
         dt.DefaultView.RowFilter = "column1 = true";

11.Sort row
  
[C#] 纯文本查看 复制代码
dt.DefaultView.Sort = "ID ,Name ASC";
          dt=dt.DefaultView.ToTable();

12.Bind DataTable
      
[C#] 纯文本查看 复制代码
//绑定的其实是DefaultView
          gvTestDataTable.DataSource = dt;
          gvTestDataTable.DataBind();

13.judge the DataTable’s Column name is a string
   
[C#] 纯文本查看 复制代码
 //判断一个字符串是否为DataTable的列名
         dtInfo.Columns.Contains("AX");

14.DataTable convert to XML and XML convert to DataTable
[C#] 纯文本查看 复制代码
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;
        }


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-6-27 00:39:52 | 显示全部楼层
非常感谢你帮了我的大忙,真的太感谢你啦!
真是非常感谢,好多东西,书上都见不到啊.
发表于 2013-7-5 14:40:36 | 显示全部楼层
好东西,辛苦了。老大
发表于 2013-7-24 18:28:27 | 显示全部楼层
非常感谢你帮了我的大忙,真的太感谢你啦!
发表于 2015-4-15 11:19:33 | 显示全部楼层
回复

使用道具 举报

发表于 2015-5-14 11:34:49 | 显示全部楼层
datatable详细用法


和这个里面写的差不多。。受教了。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-16 04:26

© 2014-2021

快速回复 返回顶部 返回列表