<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt" lang="ZH-CN">在项目中经常用到</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">DataTable,</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt" lang="ZH-CN">如果</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">DataTable</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt" lang="ZH-CN">使用得当,不仅能使程序简洁实用,而且能够提高性能,达到事半功倍的效果,现对</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">DataTable</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt" lang="ZH-CN">的使用技巧进行一下总结。</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">
</span><strong><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">一、</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">DataTable</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">简介</span></strong><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> (1)</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">构造函数</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> <br>
DataTable() </span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">不带参数初始化</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">DataTable
</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">类的新实例。</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> <br>
DataTable(string tableName) </span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">用指定的表名初始化</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">DataTable
</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">类的新实例。</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> <br>
DataTable(string tableName, string tableNamespace) </span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">用指定的表名和命名空间初始化</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">DataTable
</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">类的新实例。</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> <br>
(2) </span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">常用属性</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> <br>
CaseSensitive </span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">指示表中的字符串比较是否区分大小写。</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> <br>
ChildRelations </span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">获取此</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">DataTable
</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">的子关系的集合。</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> <br>
Columns </span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">获取属于该表的列的集合。</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> <br>
Constraints </span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">获取由该表维护的约束的集合。</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> <br>
</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">DataSet
</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt" lang="ZH-CN">获取此表所属的</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">DataSet</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt" lang="ZH-CN">。</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> <br>
DefaultView </span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt" lang="ZH-CN">获取可能包括筛选视图或游标位置的表的自定义视图。</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> <br>
</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">HasErrors
</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">获取一个值,该值指示该表所属的</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">DataSet
</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">的任何表的任何行中是否有错误。</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> <br>
MinimumCapacity </span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">获取或设置该表最初的起始大小。该表中行的最初起始大小。</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt" lang="ZH-CN">默认值为</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">
50</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt" lang="ZH-CN">。</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> <br>
Rows </span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt" lang="ZH-CN">获取属于该表的行的集合。</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> <br>
</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">TableName
</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">获取或设置</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">DataTable
</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">的名称。</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> (3)</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">常用方法</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> <br>
AcceptChanges() </span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">提交自上次调用</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">AcceptChanges()
</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">以来对该表进行的所有更改。</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> <br>
BeginInit() </span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">开始初始化在窗体上使用或由另一个组件使用的</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">DataTable</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">。初始化发生在运行时。</span></p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> Clear()
</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">清除所有数据的</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">DataTable</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">。</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> <br>
Clone() </span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">克隆</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">DataTable
</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">的结构,包括所有</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">DataTable
</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt"><a href="http://lib.csdn.net/base/architecture" class="replace_word" title="大型网站架构知识库" target="_blank" style="color:#df3434; font-weight:bold;">架构</a>和约束。</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> <br>
EndInit() </span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">结束在窗体上使用或由另一个组件使用的</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">DataTable
</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">的初始化。初始化发生在运行时。</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> <br>
ImportRow(DataRow row) </span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">将</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">DataRow
</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">复制到</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">DataTable
</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">中,保留任何属性设置以及初始值和当前值。</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> <br>
Merge(DataTable table) </span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">将指定的</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">DataTable
</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">与当前的</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">DataTable
</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">合并。</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"> <br>
NewRow() </span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">创建与该表具有相同架构的新</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">DataRow</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">。</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US"><br>
<br>
</span><strong><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">二、</span><span style="font-family:Verdana; color:#2a2a2a; font-size:10.5pt" lang="EN-US">DataTable</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">使用技巧</span></strong></p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt" lang="EN-US">
</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">(<span lang="EN-US">1</span>)<span lang="EN-US">Create a DataTable<br>
DataTable dt = new DataTable("Table_AX"); </span></span></p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt" lang="EN-US">
</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">(<span lang="EN-US">2</span>)<span lang="EN-US">Add columns for DataTable<br>
//Method 1<br>
dt.Columns.Add("column0", System.Type.GetType("System.String"));<br>
//Method 2<br>
DataColumn dc = new DataColumn("column1", System.Type.GetType("System.Boolean"));<br>
dt.Columns.Add(dc); <br>
<br>
</span>(<span lang="EN-US">3</span>)<span lang="EN-US">Add rows for DataTable<br>
//Initialize the row<br>
DataRow dr = dt.NewRow();<br>
dr["column0"] = "AX";<br>
dr["column1"] = true;<br>
dt.Rows.Add(dr);<br>
//Doesn't initialize the row<br>
DataRow dr1 = dt.NewRow();<br>
dt.Rows.Add(dr1); </span></span></p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt" lang="EN-US">
</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">(<span lang="EN-US">4</span>)<span lang="EN-US">Select row<br>
//Search the second row </span>如果没有赋值<span lang="EN-US">,</span>则用<span lang="EN-US">is null</span>来<span lang="EN-US">select<br>
DataRow[] drs = dt.Select("column1 is null");<br>
DataRow[] drss = dt.Select("column0 = 'AX'"); </span></span></p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt" lang="EN-US">
</span><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt">(<span lang="EN-US">5</span>)<span lang="EN-US">Copy DataTable include data<br>
DataTable dtNew = dt.Copy(); <br>
<br>
</span>(<span lang="EN-US">6</span>)<span lang="EN-US">Copy DataTable only scheme<br>
DataTable dtOnlyScheme = dt.Clone(); <br>
<br>
</span>(<span lang="EN-US">7</span>)<span lang="EN-US">Operate one row<br>
//</span>对<span lang="EN-US">dt</span>的操作<span lang="EN-US"><br>
//Method 1<br>
DataRow drOperate = dt.Rows[0];<br>
drOperate["column0"] = "AXzhz";<br>
drOperate["column1"] = false;<br>
//Method 2<br>
drOperate[0] = "AXzhz";<br>
drOperate[1] = false;<br>
//Method 3<br>
dt.Rows[0]["column0"] = "AXzhz";<br>
dt.Rows[0]["column1"] = false;<br>
//Method 4<br>
dt.Rows[0][0] = "AXzhz";<br>
dt.Rows[0][1] = false; <br>
<br>
</span>(<span lang="EN-US">8</span>)<span lang="EN-US">Evaluate another DataTable's row to current Datatable<br>
dtOnlyScheme.Rows.Add(dt.Rows[0].ItemArray); <br>
<br>
</span>(<span lang="EN-US">9</span>)<span lang="EN-US">Convert to string<br>
System.IO.StringWriter sw = new System.IO.StringWriter();<br>
System.Xml.XmlTextWriter xw = new System.Xml.XmlTextWriter(sw);<br>
dt.WriteXml(xw);<br>
string s = sw.ToString();<br>
<br>
</span>(<span lang="EN-US">10</span>)<span lang="EN-US">Filter DataTable<br>
dt.DefaultView.RowFilter = "column1 <> true";<br>
dt.DefaultView.RowFilter = "column1 = true";<br>
<br>
</span>(<span lang="EN-US">11</span>)<span lang="EN-US">Sort row<br>
dt.DefaultView.Sort = "ID ,Name ASC";<br>
dt=dt.DefaultView.ToTable();<br>
<br>
</span>(<span lang="EN-US">12</span>)<span lang="EN-US">Bind DataTable<br>
//</span>绑定的其实是<span lang="EN-US">DefaultView<br>
gvTestDataTable.DataSource = dt;<br>
gvTestDataTable.DataBind();<br>
<br>
</span>(<span lang="EN-US">13</span>)<span lang="EN-US">judge the DataTable</span>’<span lang="EN-US">s Column name is a string<br>
//</span>判断一个字符串是否为<span lang="EN-US">DataTable</span>的列名<span lang="EN-US"><br>
dtInfo.Columns.Contains("AX");<br>
<br>
</span>(<span lang="EN-US">14</span>)<span lang="EN-US">DataTable convert to XML and XML convert to DataTable<br>
protected void Page_Load(object sender, EventArgs e)<br>
{<br>
DataTable dt_AX = new DataTable();<br>
//dt_AX.Columns.Add("Sex", typeof(System.Boolean));<br>
//DataRow dr = dt_AX.NewRow();<br>
//dr["Sex"] = true;<br>
//dt_AX.Rows.Add(dr);<br>
string xml=ConvertBetweenDataTableAndXML_AX(dt_AX);<br>
DataTable dt = ConvertBetweenDataTableAndXML_AX(xml);<br>
}<br>
public string ConvertBetweenDataTableAndXML_AX(DataTable dtNeedCoveret)<br>
{<br>
System.IO.TextWriter tw = new System.IO.StringWriter();<br>
//if TableName is empty, WriteXml() will throw Exception. </span></span></p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span style="font-family:SimSun; color:#2a2a2a; font-size:10.5pt" lang="EN-US">dtNeedCoveret.TableName=dtNeedCoveret.TableName.Length==0?"Table_AX":dtNeedCoveret.TableName;<br>
dtNeedCoveret.WriteXml(tw);<br>
dtNeedCoveret.WriteXmlSchema(tw);<br>
return tw.ToString();<br>
}<br>
public DataTable ConvertBetweenDataTableAndXML_AX(string xml)<br>
{<br>
System.IO.TextReader trDataTable = new System.IO.StringReader(xml.Substring(0, xml.IndexOf("<?xml")));<br>
System.IO.TextReader trSchema = new System.IO.StringReader(xml.Substring(xml.IndexOf("<?xml")));<br>
DataTable dtReturn = new DataTable();<br>
dtReturn.ReadXmlSchema(trSchema);<br>
dtReturn.ReadXml(trDataTable);<br>
return dtReturn;<br>
}</span></p>
<p class="MsoNormal" style="margin:0cm 0cm 0pt"><span lang="EN-US"><span style="font-family:Times New Roman; font-size:12px"> </span></span></p>