一。創建一個內存表,下面的代碼會用到它
DataTable auto = new DataTable();
auto.Columns.Add("ID");
auto.Columns.Add("Name");
for(int i=1;i<=10;i++)
{
auto.Rows.Add(new object[]{i,"baibaoqing"});
}
二。下面介紹DataTable對象經常使用的方法
1. DataTable 的複製和克隆
創建DataTable的完全副本(full copu 複製表的結構和數據),通過DataTable的Copy方法實現
DataTable copy_Table=auto.Copy()
for(int i=0;i<copy_Table.Rows.Length;i++)
{
Response.Write("<script>alert("+copy_Table.Rows[i][0]+");</script>");
}
輸出的結果爲從0到10 的數字
有時需要複製DataTable 的表模式(表結果)而不復制數據,可以使用DataTable的Clone方法
DataTable clone_Table=auto.Clone();
在克隆了一個DataTable後,可能需要DataTable對象中的某些DataRow對象(行數據)複製到克隆的DataTabel 中,可以使用DataTable 的ImPortRow方法
clone_Table.ImportRow(auto.Rows[0]);
2.枚舉DataTable
通過Foreach循環遍歷DataTable的行和列
System.Text.StringBuilder buffer=new System.Text.StringBuiler();
foreach(DataColumn dc in auto.Colmns)
{
buffer.Append(String.Format(“{0,15}”,dc.ColumnName));
}
buffer.Append("/r/t");
foreach(DataRow dr in auto.Rows)
{
foreach(DataColumn dc in auto.Colmns)
{
buffer.Append(String.Format("{0,15}",dr[dc]));
}
buffer.Append("/r/t");
}
textbox1.Text=buffer.ToString();
三. 使用DataView
1. Sort排序
DataView view=new DataView(auto);
view.Sort="Make ASC,Year DESC";
不過我很少使用DataView 的排序功能,我的作法是在SQL語句中使用Order by
2. 使用RowFilter 精確查找
DataView view=new DataView(auto);
view.RowFilter="Make like 'AA%' and Year>2001";
同樣也可以在SQL語句中設置查詢條件,看個人的習慣和實際的需要了。
3 將DataView 導出到一個新表
DataTable new_Table=view.ToTable("MyTable",true,"id","name");
MyTable 新表的名稱,true 表示顯示不同的值,將相同的行刪除(相當於Sql 的distinct),
id 和name 爲新表的列ID.
4. 枚舉DataView
和枚舉DataTabe大同小異
System.Text.StringBuilder buffer=new System.Text.StringBuiler();
foreach(DataColumn dc in auto.Colmns)
{
buffer.Append(String.Format(“{0,15}”,dc.ColumnName));
}
buffer.Append("/r/t");
foreach(DataRowView dv in view)
{
foreach(DataColumn dc in auto.Colmns)
{
buffer.Append(String.Format("{0,15}",dv[dc]));
}
buffer.Append("/r/t");
}
textbox1.Text=buffer.ToString();
另外在.net 2.0中DataTable對象可以處理XML文件,和DataSet一樣,DataTable對象也有ReadXml和WriteXml 的方法,沒有具體用過,有機會使用時再做總結。
------------------------------------------------------------------------------------------------------------------------------------------
通過DataTable獲得表的主鍵
很多情形下我們需要知道表的主鍵是什麼。在ADO.Net中提供了DataTable可以映射數據庫的表。於是便可以利用DataTable的屬性PrimaryKey,它是DataColumn[] 類型是一個數組。我們可以使用如下的代碼
DataColumn[] cols;
cols = Table.PrimaryKey;
//注意不是cols是DataColumn數組,不是DataColumn變量。這樣做主要是爲了處理聯合主鍵的問題。
for(int i = 0; i < cols.Length; i++)
{
MessageBox.Show(cols[i].ColumnName);
}
按理這個問題就已經解決了,但是cols.Length卻是0。原來在默認的情況下填充DataTable時並沒有從數據庫中取的主鍵的信息。如何獲得主鍵呢?經過研究發現在填充Dataset的時候可以使用DataAdapter的MissingSchemaAction屬性幫助我們解決這個問題,於是有如下的代碼:
//使用DataAdapter填充DataTable