C#_DataTable简介

它是位于内存中的一张表,是你执行 SQL 查询之后的结果集,可以形象地把它理解为一张包含若干行若干列的表格。

这里顺带提一下Dataset :DataSet 可以理解成若干 DataTable 的集合, DataSet 在内存里面维护一个表集合包括表间关系。对于 .NET Framework 2.0 之前的版本, DataSet 在 ADO.NET 中拥有至关重要的作用,但在其后的版本中,由于 DataTable 类的完备 ( 例如与 XML 相关的几个方法以及 Merge 方法 ) ,其作用稍有削弱,甚至于有些情况下你去初始化一个 DataSet 对象本身就是多余的。
构造函数

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

DataTable(string tableName)    //用指定的表名初始化DataTable 类的新实例。

DataTable(string tableName, string tableNamespace) //用指定的表名和命名空间初始化DataTable 类的新实例。

常用属性

CaseSensitive:指示表中的字符串比较是否区分大小写。

ChildRelations: 获取此DataTable 的子关系的集合。

Columns: 获取属于该表的列的集合。

Constraints:获取由该表维护的约束的集合。

DefaultView:获取可能包括筛选视图或游标位置的表的自定义视图。

HasErrors: 获取一个值,该值指示该表所属的DataSet 的任何表的任何行中是否有错误。

MinimumCapacity: 获取或设置该表最初的起始大小。该表中行的最初起始大小。默认值为 50。

Rows:获取属于该表的行的集合。

TableName:获取或设置DataTable 的名称。

常用方法(冰山一角)

AcceptChanges()          //提交自上次调用AcceptChanges() 以来对该表进行的所有更改。

BeginInit()              //开始初始化在窗体上使用或由另一个组件使用的DataTable。初始化发生在运行时。

Clear()                  //清除所有数据的DataTable。

Clone()                  //克隆DataTable 的结构,包括所有DataTable 架构和约束。

EndInit()                //结束在窗体上使用或由另一个组件使用的DataTable 的初始化。初始化发生在运行时。

ImportRow(DataRow row)   //将DataRow 复制到DataTable 中,保留任何属性设置以及初始值和当前值。

Merge(DataTable table)   //将指定的DataTable 与当前的DataTable 合并。

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

DataTable使用技巧

创建一个DataTable

DataTable dt = new DataTable("Table_AX");`

给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);

给DataTable添加行

//Initialize the row

DataRow dr = dt.NewRow();

dr["column0"] = "AX";

dr["column1"] = true;

dt.Rows.Add(dr);

//Doesn't initialize the row,数据为null

DataRow dr1 = dt.NewRow();

dt.Rows.Add(dr1);  

根据数据筛选行

 //Search the second row 如果没有赋值,则用is null来select

DataRow[] drs = dt.Select("column1 is null");

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

复制DataTable

//Copy DataTable include data

DataTable dtNew = dt.Copy();

//Copy DataTable only scheme

DataTable dtOnlyScheme = dt.Clone();

操作行

//对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;

转为字符

System.IO.StringWriter sw = new System.IO.StringWriter();

System.Xml.XmlTextWriter xw = new System.Xml.XmlTextWriter(sw);

dt.WriteXml(xw);

string s = sw.ToString();

过滤DataTable

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

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

排序

dt.DefaultView.Sort = "ID ,Name ASC";

dt=dt.DefaultView.ToTable();

DataGridView绑定DataTable

//绑定的其实是DefaultView

dgvTestDataTable.DataSource = dt;

dgvTestDataTable.DataBind();

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

dtInfo.Columns.Contains("AX");

数据表转换为XML和XML转换为数据表

 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;

}

Evaluate another DataTable’s row to current Datatable

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

事件说明

ColumnChanging //当更改某一值时出现指定 System.Data.DataColumn 中 System.Data.DataRow。

ColumnChanged //一个值更改后发生指定 System.Data.DataColumn 中 System.Data.DataRow。

Initialized 之后,将会 System.Data.DataTable 初始化。

RowChanged //在成功更改 System.Data.DataRow 后发生。

RowChanging //发生时 System.Data.DataRow 正在更改。

RowDeleting //要删除表中的行之前发生。

RowDeleted //已删除表中的行后发生。

TableClearing //发生时 System.Data.DataTable 被清除。

TableCleared //之后,将会 System.Data.DataTable 被清除。

TableNewRow //当新时发生 System.Data.DataRow 插入。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值