亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#中DataTable排序、檢索、合并等操作實例

2020-01-24 02:41:49
字體:
來源:轉載
供稿:網友

一、排序
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();


二、檢索

設置查詢字符串
使用Select方法獲取到所有滿足條件的數據行對象數組 (多項查詢條件間,用and隔開)
復制代碼 代碼如下:
DataRow[] matches = dt.Select("id<'003' and name='名字11'");
string strName = matches[0]["name"].ToString();

三、合并

假定有2個DataTable:Dt1 , Dt2。表結構一樣
將Dt2接在Dt1后可采用此方法

復制代碼 代碼如下:
dt1.Merge(dt2);


四、在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" });

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美欧洲在线观看| 亚洲成人在线网| 久久免费成人精品视频| 亚洲天堂免费观看| 久久久精品视频成人| 中文字幕亚洲激情| 亚洲综合中文字幕在线观看| 亚洲国产私拍精品国模在线观看| 成人免费xxxxx在线观看| 国产精品99导航| 亚洲男人天堂九九视频| 久久影院模特热| 欧美网站在线观看| 韩国三级电影久久久久久| 在线视频国产日韩| www.日韩.com| 午夜精品www| 亚州成人av在线| 久久久在线视频| 亚洲a区在线视频| 日韩少妇与小伙激情| 国产亚洲欧洲黄色| 国产精品露脸av在线| 青青久久av北条麻妃海外网| 日韩av在线网页| 国产精品久久久久久亚洲调教| 两个人的视频www国产精品| 视频在线观看99| 2023亚洲男人天堂| 国产精品99久久久久久久久久久久| zzijzzij亚洲日本成熟少妇| 亚洲综合视频1区| 亚洲成人av在线播放| 亚洲自拍av在线| 91精品久久久久| 欧美国产精品人人做人人爱| 久久国产精品影片| 国产精品久久久久av| 国产精品亚洲精品| 亚洲免费高清视频| 亚洲女人天堂成人av在线| 欧美人在线视频| 日本亚洲欧洲色α| 欧美成年人在线观看| 精品久久久91| 亚洲天堂免费观看| 亚洲free性xxxx护士白浆| 日韩精品福利网站| 另类美女黄大片| 国产在线精品成人一区二区三区| 高跟丝袜欧美一区| 国产色婷婷国产综合在线理论片a| 欧美精品免费在线| 按摩亚洲人久久| 国产精品啪视频| www国产亚洲精品久久网站| 91国在线精品国内播放| 国产亚洲精品美女久久久久| 国产噜噜噜噜久久久久久久久| 中文字幕日韩在线观看| 一本一本久久a久久精品综合小说| 久久精品久久久久电影| 国产一区二区日韩精品欧美精品| 91精品综合久久久久久五月天| 中文国产成人精品久久一| 国产va免费精品高清在线| 日韩一区二区av| 深夜福利一区二区| 中文字幕一区日韩电影| 国产精品激情av电影在线观看| www.亚洲免费视频| 亚洲精品一区二区久| 欧美一区二粉嫩精品国产一线天| 国产大片精品免费永久看nba| 国产成人精品免费久久久久| 欧美怡春院一区二区三区| 日韩视频免费大全中文字幕| 国产精品久久久久久久久久免费| 国产综合色香蕉精品| 2019中文字幕免费视频| 色偷偷88888欧美精品久久久| 日韩精品有码在线观看| 成人免费看黄网站| 欧美日韩一区免费| 国产成人精品一区| 午夜免费久久久久| 亚洲国产日韩欧美综合久久| 韩日欧美一区二区| 亚洲精品一区二三区不卡| 亚洲自拍另类欧美丝袜| 国产在线视频不卡| 精品国产一区二区三区久久久狼| 欧美大片第1页| 国产精品永久免费| 色综合色综合久久综合频道88| 日韩久久精品成人| 国产精品视频1区| 亚洲另类图片色| 性欧美亚洲xxxx乳在线观看| 亚洲乱码一区二区| 欧美又大粗又爽又黄大片视频| 久久久久久久久91| 日韩有码在线电影| 日韩av在线免费看| 日韩电影免费观看在线观看| 色樱桃影院亚洲精品影院| 538国产精品视频一区二区| 中文字幕精品国产| 国产成人精品免高潮在线观看| 国产亚洲激情视频在线| 日韩电影在线观看永久视频免费网站| 欧美成人免费在线视频| 亚洲免费视频观看| 亚洲а∨天堂久久精品9966| 久久久午夜视频| 91亚洲精品久久久久久久久久久久| 国产精品久久久久久久天堂| 国产成人鲁鲁免费视频a| 午夜精品久久久久久久99热| 亚洲激情 国产| 亚洲电影免费观看高清完整版| 国产精品在线看| 国产精品人成电影在线观看| 欧美成在线观看| 欧美性生交xxxxxdddd| 亚洲国产黄色片| 欧美激情视频免费观看| 欧美日韩一区二区三区在线免费观看| 欧美日韩国产色视频| 97在线视频精品| 国产精自产拍久久久久久蜜| 隔壁老王国产在线精品| 国产一区二区欧美日韩| 国产999精品久久久| 51精品在线观看| 国产suv精品一区二区三区88区| 亚洲国产成人在线视频| 久久99亚洲精品| 7777精品视频| 国产欧美日韩精品专区| 亚洲人成电影网站色xx| 久久久精品免费| 国产精品一区二区三区毛片淫片| 51ⅴ精品国产91久久久久久| 成人久久久久久久| 92国产精品视频| 国产中文字幕日韩| 亚洲成人黄色在线观看| 久久久亚洲精品视频| 国产精品入口尤物| 精品一区二区三区电影| 国产精品9999| 精品动漫一区二区三区| 国产精品欧美激情在线播放| 日韩欧美主播在线| 91欧美精品成人综合在线观看| 欧美午夜丰满在线18影院| 国产亚洲一区二区精品| 成人黄色大片在线免费观看| 国产精品日韩久久久久| 亚洲国产精品99久久| 91人成网站www| 久久久视频精品| 欧美精品国产精品日韩精品|