最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2014年04月22日 10:40:28   作者:  
這篇文章主要介紹了C#中DataTable排序、檢索、合并等操作實(shí)例,其中詳細(xì)介紹了DataTable.Select的一些注意問題和使用技巧等,需要的朋友可以參考下

一、排序
1.獲取DataTable的默認(rèn)視圖
2.對(duì)視圖設(shè)置排序表達(dá)式
3.用排序后的視圖導(dǎo)出的新DataTable替換就DataTable(Asc升序可省略,多列排序用","隔開)
1)、重生法

復(fù)制代碼 代碼如下:
dstaset.Tables.Add(dt)
dataset.Tables(0).DefaultView.Sort = "id desc"

2)、直接法
復(fù)制代碼 代碼如下:
dv = New DataView(dt)
dv.Sort = "id desc"
dt = dv.ToTable();

3)、間接法
復(fù)制代碼 代碼如下:
dv = New DataView(ds.Tables[0])
dv.Sort = "id desc"
dt = dv.ToTable();


二、檢索

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

三、合并

假定有2個(gè)DataTable:Dt1 , Dt2。表結(jié)構(gòu)一樣
將Dt2接在Dt1后可采用此方法

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


四、在DataTable中查詢應(yīng)該注意的問題

完成一個(gè)查詢,返回一個(gè)DataTable后,很多時(shí)候都想在查詢結(jié)果中繼續(xù)搜索。這時(shí)可以使用DataTable.Select方法對(duì)結(jié)果進(jìn)行再查詢
Select方法有4個(gè)重載,我們經(jīng)常用到的就是DataTable.Select(String)
這個(gè)String的參數(shù)是查詢的限定式。相當(dāng)于SQL查詢語(yǔ)言中的WHERE語(yǔ)句(不含WHERE),其語(yǔ)法符合SQL語(yǔ)言語(yǔ)法。
Select方法的返回的是包含查詢到的數(shù)據(jù)的DataRow,但是這個(gè)DataRow只是被查詢的DataTable的一個(gè)映射,所以DataRow是隨著DataTable的行變化而變化的。例如,DataTable的行都被刪除了,那么DataRow中的數(shù)據(jù)同樣被刪除了(即便是先Select,再刪除的)
所以,要想把返回的DataRow放進(jìn)數(shù)據(jù)顯示控件中,需要將其放入另一個(gè)DataTable中,如果直接放入原DataTable或?qū)⒃璂ataTable的行全部清除再放入查詢所得的數(shù)據(jù)都是不行的,程序會(huì)顯示錯(cuò)誤,錯(cuò)誤提示是“表中已有此行”。
另外,在一個(gè)新表中插入行,不能直接用DataTable.Rows.Add(DataRow)的方式,因?yàn)檫@樣是插入一個(gè)新表,也就是DataRow是空的。要用導(dǎo)入行的方式,DataTable.ImportRow(DataRow)。當(dāng)然,前提是這個(gè)新表要有與原數(shù)據(jù)表一樣的結(jié)構(gòu)。

復(fù)制代碼 代碼如下:
Public Function SDEResearch(ByVal InputDT As DataTable, ByVal SearchStr As String) As DataTable

'用來(lái)存儲(chǔ)再查詢后的數(shù)據(jù)表
Dim ReSearchDT As DataTable = InputDT.Clone() '保證有與源數(shù)據(jù)表相同的表結(jié)構(gòu)

'用來(lái)存儲(chǔ)查詢后返回的datarow數(shù)組
Dim ReSearchDR() As DataRow = Nothing

Try
ReSearchDR = InputDT.Select("NAME LIKE '%" + SearchStr + "%'") '只是從數(shù)據(jù)表中映射出來(lái)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數(shù)據(jù)的方法

對(duì)DataTable進(jìn)行過濾篩選的一些方法Select,dataview
當(dāng)你從數(shù)據(jù)庫(kù)里取出一些數(shù)據(jù),然后要對(duì)數(shù)據(jù)進(jìn)行整合,你很容易就會(huì)想到:

復(fù)制代碼 代碼如下:
DataTable dt = new DataTable();//假設(shè)dt是由"SELECT C1,C2,C3 FROM T1"查詢出來(lái)的結(jié)果
for (int i = 0; i < dt.Rows.Count; i++)
{
    if (dt.Rows[i]["C1"].ToString() == "abc")//查詢條件
    {
        //進(jìn)行操作
    }
}

但這種做法用一兩次還好說(shuō),用多了就累了。那有沒有更好的方法呢?記得LinQ是可以直接對(duì)DataTable進(jìn)行查詢操作的,那在.Net Framework 2.0里,有沒有類似的方法呢?答案是肯定的,就是dt.Select(),上面的操作可以改成這樣:
復(fù)制代碼 代碼如下:
DataRow[] drArr = dt.Select("C1='abc'");//查詢

還可以這樣操作:
復(fù)制代碼 代碼如下:
DataRow[] drArr = dt.Select("C1 LIKE 'abc%'");//模糊查詢
DataRow[] drArr = dt.Select("'abc' LIKE C1 + '%'", "C2 DESC");//另一種模糊查詢的方法
DataRow[] drArr = dt.Select("C1='abc'", "C2 DESC");//排序

問題又來(lái)了,如果要把DataRow賦值給新的DataTable,怎么賦值呢?你可能會(huì)想到:
復(fù)制代碼 代碼如下:
DataTable dtNew = dt.Clone();
for (int i = 0; i < drArr.Length; i++)
{
    dtNew.Rows.Add(drArr[i]);
}

但這樣程序就會(huì)出錯(cuò),說(shuō)該DataRow是屬于其他DataTable的,那要怎么做呢?很簡(jiǎn)單,這樣就可以解決了:
復(fù)制代碼 代碼如下:
DataTable dtNew = dt.Clone();
for (int i = 0; i < drArr.Length; i++)
{
    dtNew.ImportRow(drArr[i]);
}

這樣就完成了。
3.5里的DataRow[]有個(gè)擴(kuò)展方法CopyToDataTable()
復(fù)制代碼 代碼如下:
/*
* 補(bǔ)充一下,還可以利用DataView來(lái)達(dá)到檢索的目的。
*/
DataTable dataSource = new DataTable();
DataView dv = dataSource.DefaultView;
dv.RowFilter = "columnA = 'abc'";
//1.過濾后直接獲取DataTable
DataTable newTable1 = dv.ToTable();
//2.設(shè)置新DataTable的TableName
DataTable newTable2 = dv.ToTable("NewTableName");
//3.設(shè)置新表是否過濾重復(fù)項(xiàng),擁有的列的列名以及出現(xiàn)的順序
//即可以設(shè)置新表的字段。但是字段名肯定是老表dataSource中擁有的。
DataTable newTable3 =
dv.ToTable(true, new string[] { "columnA,columnF,columnC" });
//4.綜合了2.3兩點(diǎn)。
DataTable newTable4 =
dv.ToTable("NewTableName", true, new string[] { "columnA,columnF,columnC" });

相關(guān)文章

  • DevExpress獲取TreeList可視區(qū)域節(jié)點(diǎn)集合的實(shí)現(xiàn)方法

    DevExpress獲取TreeList可視區(qū)域節(jié)點(diǎn)集合的實(shí)現(xiàn)方法

    這篇文章主要介紹了DevExpress獲取TreeList可視區(qū)域節(jié)點(diǎn)集合的實(shí)現(xiàn)方法,有一定實(shí)用價(jià)值,需要的朋友可以參考下
    2014-08-08
  • C#用websocket實(shí)現(xiàn)簡(jiǎn)易聊天功能(客戶端)

    C#用websocket實(shí)現(xiàn)簡(jiǎn)易聊天功能(客戶端)

    這篇文章主要為大家詳細(xì)介紹了C#用websocket實(shí)現(xiàn)簡(jiǎn)易聊天功能,客戶端方向,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C# string轉(zhuǎn)unicode字符的實(shí)現(xiàn)

    C# string轉(zhuǎn)unicode字符的實(shí)現(xiàn)

    本文主要介紹了C# string轉(zhuǎn)unicode字符的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • C#通過chrome插件將HTML網(wǎng)頁(yè)轉(zhuǎn)換為PDF

    C#通過chrome插件將HTML網(wǎng)頁(yè)轉(zhuǎn)換為PDF

    這篇文章主要介紹了C#通過chrome插件將HTML網(wǎng)頁(yè)轉(zhuǎn)換為PDF,將HTML網(wǎng)頁(yè)內(nèi)容轉(zhuǎn)換為 PDF 格式能方便文檔的后續(xù)打印、存檔和分享等,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2025-03-03
  • C# 值類型的實(shí)現(xiàn)

    C# 值類型的實(shí)現(xiàn)

    本文主要介紹了C# 值類型的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • C# 正則表達(dá)式常用的符號(hào)和模式解析(最新推薦)

    C# 正則表達(dá)式常用的符號(hào)和模式解析(最新推薦)

    這篇文章主要介紹了C# 正則表達(dá)式常用的符號(hào)和模式解析,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • WPF自定義選擇年月控件詳解

    WPF自定義選擇年月控件詳解

    這篇文章主要為大家詳細(xì)介紹了WPF自定義選擇年月控件的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • WPF實(shí)現(xiàn)動(dòng)畫效果(六)之路徑動(dòng)畫

    WPF實(shí)現(xiàn)動(dòng)畫效果(六)之路徑動(dòng)畫

    這篇文章介紹了WPF實(shí)現(xiàn)動(dòng)畫效果之路徑動(dòng)畫,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C#開發(fā)中經(jīng)常用的加密解密方法示例

    C#開發(fā)中經(jīng)常用的加密解密方法示例

    這篇文章主要給大家介紹了關(guān)于C#開發(fā)中經(jīng)常用的加密解密方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • C#通過熱鍵控制顯示器開關(guān)的方法

    C#通過熱鍵控制顯示器開關(guān)的方法

    這篇文章主要介紹了C#通過熱鍵控制顯示器開關(guān)的方法,涉及C#針對(duì)熱鍵的操作技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-12-12

最新評(píng)論

克拉玛依市| 都江堰市| 镇坪县| 延川县| 若尔盖县| 永春县| 烟台市| 宁阳县| 呈贡县| 阿拉善右旗| 穆棱市| 都匀市| 五峰| 洪泽县| 天等县| 清远市| 大田县| 志丹县| 云林县| 进贤县| 东平县| 宣城市| 铅山县| 长岛县| 青冈县| 长泰县| 伊金霍洛旗| 宜都市| 屯留县| 尼玛县| 麻栗坡县| 贡觉县| 新邵县| 绩溪县| 辛集市| 宁夏| 多伦县| 阿图什市| 三穗县| 舒城县| 金塔县|