程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中DataTable排序、檢索、歸並等操作實例

C#中DataTable排序、檢索、歸並等操作實例

編輯:C#入門知識

C#中DataTable排序、檢索、歸並等操作實例。本站提示廣大學習愛好者:(C#中DataTable排序、檢索、歸並等操作實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C#中DataTable排序、檢索、歸並等操作實例正文


1、排序
1.獲得DataTable的默許視圖
2.對視圖設置排序表達式
3.用排序後的視圖導出的新DataTable調換就DataTable(Asc升序可省略,多列排序用","離隔)
1)、更生法
dstaset.Tables.Add(dt)
dataset.Tables(0).DefaultView.Sort = "id desc"
2)、直接法
dv = New DataView(dt)
dv.Sort = "id desc"
dt = dv.ToTable();
3)、直接法
dv = New DataView(ds.Tables[0])
dv.Sort = "id desc"
dt = dv.ToTable();

2、檢索

設置查詢字符串
應用Select辦法獲得到一切知足前提的數據行對象數組 (多項查詢前提間,用and離隔)
DataRow[] matches = dt.Select("id<'003' and name='名字11'");
string strName = matches[0]["name"].ToString();

3、歸並

假定有2個DataTable:Dt1 , Dt2。表構造一樣
將Dt2接在Dt1後可采取此辦法
dt1.Merge(dt2);


4、在DataTable中查詢應當留意的成績

完成一個查詢,前往一個DataTable後,許多時刻都想在查詢成果中持續搜刮。這時候可使用DataTable.Select辦法對成果停止再查詢
Select辦法有4個重載,我們常常用到的就是DataTable.Select(String)
這個String的參數是查詢的限制式。相當於SQL查詢說話中的WHERE語句(不含WHERE),其語法相符SQL說話語法。
Select辦法的前往的是包括查詢到的數據的DataRow,然則這個DataRow只是被查詢的DataTable的一個映照,所以DataRow是跟著DataTable的行變更而變更的。例如,DataTable的行都被刪除,那末DataRow中的數據異樣被刪除(即使是先Select,再刪除的)
所以,要想把前往的DataRow放進數據顯示控件中,須要將其放入另外一個DataTable中,假如直接放入原DataTable或將原DataTable的行全體消除再放入查詢所得的數據都是不可的,法式會顯示毛病,毛病提醒是“表中已有此行”。
別的,在一個新表中拔出行,不克不及直接用DataTable.Rows.Add(DataRow)的方法,由於如許是拔出一個新表,也就是DataRow是空的。要用導入行的方法,DataTable.ImportRow(DataRow)。固然,條件是這個新表要有與原數據表一樣的構造。
Public Function SDEResearch(ByVal InputDT As DataTable, ByVal SearchStr As String) As DataTable

'用來存儲再查詢後的數據表
Dim ReSearchDT As DataTable = InputDT.Clone() '包管有與源數據表雷同的表構造

'用來存儲查詢後前往的datarow數組
Dim ReSearchDR() As DataRow = Nothing

Try
ReSearchDR = InputDT.Select("NAME LIKE '%" + SearchStr + "%'") '只是從數據表中映照出來datarow(),所以不克不及刪除原表中的行
Catch ex As Exception
Return Nothing
End Try

For i As Int16 = 0 To ReSearchDR.Length - 1
ReSearchDT.ImportRow(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 < dt.Rows.Count; i++)
{
    if (dt.Rows[i]["C1"].ToString() == "abc")//查詢前提
    {
        //停止操作
    }
}
但這類做法用一兩次還好說,用多了就累了。那有無更好的辦法呢?記得LinQ是可以直接對DataTable停止查詢操作的,那在.Net Framework 2.0裡,有無相似的辦法呢?謎底是確定的,就是dt.Select(),下面的操作可以改成如許:
DataRow[] drArr = dt.Select("C1='abc'");//查詢
還可以如許操作:
DataRow[] drArr = dt.Select("C1 LIKE 'abc%'");//隱約查詢
DataRow[] drArr = dt.Select("'abc' LIKE C1 + '%'", "C2 DESC");//另外一種隱約查詢的辦法
DataRow[] drArr = dt.Select("C1='abc'", "C2 DESC");//排序
成績又來了,假如要把DataRow賦值給新的DataTable,怎樣賦值呢?你能夠會想到:
DataTable dtNew = dt.Clone();
for (int i = 0; i < drArr.Length; i++)
{
    dtNew.Rows.Add(drArr[i]);
}
但如許法式就會失足,說該DataRow是屬於其他DataTable的,那要怎樣做呢?很簡略,如許便可以處理了:
DataTable dtNew = dt.Clone();
for (int i = 0; i < drArr.Length; i++)
{
    dtNew.ImportRow(drArr[i]);
}
如許就完成了。
3.5裡的DataRow[]有個擴大辦法CopyToDataTable()
/*
* 彌補一下,還可以應用DataView來到達檢索的目標。
*/
DataTable dataSource = new DataTable();
DataView dv = dataSource.DefaultView;
dv.RowFilter = "columnA = 'abc'";
//1.過濾後直接獲得DataTable
DataTable newTable1 = dv.ToTable();
//2.設置新DataTable的TableName
DataTable newTable2 = dv.ToTable("NewTableName");
//3.設置新表能否過濾反復項,具有的列的列名和湧現的次序
//便可以設置新表的字段。然則字段名確定是老表dataSource中具有的。
DataTable newTable3 =
dv.ToTable(true, new string[] { "columnA,columnF,columnC" });
//4.綜合了2.3兩點。
DataTable newTable4 =
dv.ToTable("NewTableName", true, new string[] { "columnA,columnF,columnC" });

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved