DataTable详细用法

DataTable详细用法

一.DataTable简介

(1)构造函数

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

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

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

(2) 常用属性

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

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

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

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

** DataSet 获取此表所属的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("

System.IO.TextReader trSchema = new System.IO.StringReader(xml.Substring(xml.IndexOf("

DataTable dtReturn = new DataTable();

dtReturn.ReadXmlSchema(trSchema);

dtReturn.ReadXml(trDataTable);

return dtReturn;

}

数据库获取datatable:

string steSq2 = "SELECT \"產品別\" FROM \"LayoutQCCheck\".\"產品別\"";

NpgsqlDataAdapter nsd2 = new NpgsqlDataAdapter(steSq2, cn);

DataSet ds2 = new DataSet();

nsd2.Fill(ds2);

dt2 = ds2.Tables[0];

if(dt2 !=null&&dt2.Rows.Count>0)

{

for (int i = 0; i < dt2.Rows.Count;i++ )

{

DataRow dr2 = dt2.Rows[i];

num1.Add(dr2["產品別"].ToString());

}

}

相关阅读