當前位置

首頁 > 商務英語 > 計算機英語 > c中datatable的用法

c中datatable的用法

推薦人: 來源: 閱讀: 1.22W 次

c中datatable的用法的用法你知道嗎?下面小編就跟你們詳細介紹下c中datatable的用法的用法,希望對你們有用。

ing-bottom: 75%;">c中datatable的用法

  c中datatable的用法的用法如下:

一、排序

1.獲取DataTable的預設檢視

2.對檢視設定排序表示式

3.用排序後的檢視匯出的新DataTable替換就DataTable(Asc升序可省略,多列排序用","隔開)

1)、重生法

複製程式碼 程式碼如下:

(dt)

es(0) = "id desc"

2)、直接法

複製程式碼 程式碼如下:

dv = New DataView(dt)

= "id desc"

dt = ble();

3)、間接法

複製程式碼 程式碼如下:

dv = New DataView(es[0])

= "id desc"

dt = ble();

二、檢索

設定查詢字串

使用Select方法獲取到所有滿足條件的資料行物件陣列 (多項查詢條件間,用and隔開)

複製程式碼 程式碼如下:

DataRow[] matches = ct("id<'003' and name='名字11'");

string strName = matches[0]["name"]ring();

三、合併

假定有2個DataTable:Dt1 , Dt2。表結構一樣

將Dt2接在Dt1後可採用此方法

複製程式碼 程式碼如下:

e(dt2);

四、在DataTable中查詢應該注意的問題

完成一個查詢,返回一個DataTable後,很多時候都想在查詢結果中繼續搜尋。這時可以使用ct方法對結果進行再查詢

Select方法有4個過載,我們經常用到的就是ct(String)

這個String的引數是查詢的限定式。相當於SQL查詢語言中的WHERE語句(不含WHERE),其語法符合SQL語言語法。

Select方法的返回的是包含查詢到的資料的DataRow,但是這個DataRow只是被查詢的DataTable的一個對映,所以DataRow是隨著DataTable的行變化而變化的。例如,DataTable的行都被刪除了,那麼DataRow中的資料同樣被刪除了(即便是先Select,再刪除的)

所以,要想把返回的DataRow放進資料顯示控制元件中,需要將其放入另一個DataTable中,如果直接放入原DataTable或將原DataTable的行全部清除再放入查詢所得的資料都是不行的,程式會顯示錯誤,錯誤提示是“表中已有此行”。

另外,在一個新表中插入行,不能直接用(DataRow)的方式,因為這樣是插入一個新表,也就是DataRow是空的。要用匯入行的方式,rtRow(DataRow)。當然,前提是這個新表要有與原資料表一樣的結構。

複製程式碼 程式碼如下:

Public Function SDEResearch(ByVal InputDT As DataTable, ByVal SearchStr As String) As DataTable

'用來儲存再查詢後的資料表

Dim ReSearchDT As DataTable = e() '保證有與源資料表相同的表結構

'用來儲存查詢後返回的datarow陣列

Dim ReSearchDR() As DataRow = Nothing

Try

ReSearchDR = ct("NAME LIKE '%" + SearchStr + "%'") '只是從資料表中映射出來datarow(),所以不能刪除原表中的行

Catch ex As Exception

Return Nothing

End Try

For i As Int16 = 0 To th - 1

rtRow(ReSearchDR(i))

Next

Return ReSearchDT

End Function

附:篩選DataTable資料的方法

對DataTable進行過濾篩選的一些方法Select,dataview

當你從資料庫裡取出一些資料,然後要對資料進行整合,你很容易就會想到:

複製程式碼 程式碼如下:

DataTable dt = new DataTable();//假設dt是由"SELECT C1,C2,C3 FROM T1"查詢出來的結果

for (int i = 0; i < t; i++)

{

if ([i]["C1"]ring() == "abc")//查詢條件

{

//進行操作

}

}

但這種做法用一兩次還好說,用多了就累了。那有沒有更好的方法呢?記得LinQ是可以直接對DataTable進行查詢操作的,那在 Framework 2.0裡,有沒有類似的方法呢?答案是肯定的,就是ct(),上面的操作可以改成這樣:

複製程式碼 程式碼如下:

DataRow[] drArr = ct("C1='abc'");//查詢

還可以這樣操作:

複製程式碼 程式碼如下:

DataRow[] drArr = ct("C1 LIKE 'abc%'");//模糊查詢

DataRow[] drArr = ct("'abc' LIKE C1 + '%'", "C2 DESC");//另一種模糊查詢的方法

DataRow[] drArr = ct("C1='abc'", "C2 DESC");//排序

問題又來了,如果要把DataRow賦值給新的DataTable,怎麼賦值呢?你可能會想到:

複製程式碼 程式碼如下:

DataTable dtNew = e();

for (int i = 0; i < th; i++)

{

(drArr[i]);

}

但這樣程式就會出錯,說該DataRow是屬於其他DataTable的,那要怎麼做呢?很簡單,這樣就可以解決了:

複製程式碼 程式碼如下:

DataTable dtNew = e();

for (int i = 0; i < th; i++)

{

rtRow(drArr[i]);

}

這樣就完成了。

3.5裡的DataRow[]有個擴充套件方法CopyToDataTable()

複製程式碼 程式碼如下:

/*

* 補充一下,還可以利用DataView來達到檢索的目的。

*/

DataTable dataSource = new DataTable();

DataView dv = ultView;

ilter = "columnA = 'abc'";

//1.過濾後直接獲取DataTable

DataTable newTable1 = ble();

//2.設定新DataTable的TableName

DataTable newTable2 = ble("NewTableName");

//3.設定新表是否過濾重複項,擁有的列的列名以及出現的順序

//即可以設定新表的欄位。但是欄位名肯定是老表dataSource中擁有的。

DataTable newTable3 =

ble(true, new string[] { "columnA,columnF,columnC" });

//4.綜合了2.3兩點。

DataTable newTable4 =

ble("NewTableName", true, new string[] { "columnA,columnF,columnC" });