它是位于内存中的一张表,是你执行 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 插入。