2010-02-02 48 views
0
創建數據表中的排序表達式

我有一個DataTable,其中包含許多列,其中三個是主要的:請幫我在vb.net

  1. hotelid
  2. dshotelid
  3. hotelname

某些酒店只包含dshotelid,有些酒店只包含hotelid,有些包含dshotelid和hotelid。

我需要那種以這樣的方式讓那些誰得到這兩個dshotelid和hotelid酒店應該是在上面,然後將這些誰只已經得到酒店dshotelid,最後那些誰只拿到了hotelid酒店...

請幫我創建這樣的表達式。

我創造了這個:

dtmaintable.DefaultView.Sort = "dshotelid, hotelid" 

但它沒有給我所需的輸出。

+0

嘗試在此之前的問題:HTTP://計算器。com/questions/582374/dataview-sort-more-just-asc-desc-need-custom-sort – roufamatic 2010-02-02 07:29:00

+0

其不工作 – 2010-02-02 07:44:01

+0

您是否看到過我的回覆尚未解決您的FilterAndSortTable解決方案?請參閱下面我的答案的編輯部分.. – GenericMeatUnit 2010-02-05 21:48:35

回答

0

我得到了答案的:

datagrid1.datasource = FilterandSortTable(dtmaintable,"", "dshotelid desc, hotelid desc") 

Public Shared Function FilterandSortTable(ByVal SourceTable As DataTable, ByVal strFilters As String, Optional ByVal strOrder As String = "") As DataTable 
    Dim Tbl As DataTable = SourceTable.Clone 
    Dim rows() As DataRow = SourceTable.Select(strFilters, strOrder) 
    For i As Integer = 0 To rows.Length - 1 
     Tbl.ImportRow(rows(i)) 
    Next 
    Return Tbl 
End Function 
+0

以及它給我期望的輸出,但是,請檢查它並確認我,我確實是否正確... – 2010-02-02 10:25:30

+0

我已經讚揚了我以前的答案,談論這個解決方案。 – GenericMeatUnit 2010-02-04 10:27:08

1

其中有NULL的字段傾向於出現在有序列的頂部(除非排序按降序排列),因此您可能會在底部看到既有hotelid又有dshotelid的行,而不是頂部?

這個數據表是如何填充的?如果它來自數據庫查詢,那麼構建一個包含您需要的任何排序鍵的附加列(或多個列)是一件簡單的事情 - 無論它是其他列的合併還是其他唯一標識符。

編輯:2010年2月4日 - 響應你的「FilterAndSortTable」解決方案:

您的解決方案作品,但它不是因爲FilterAndSortTable的 - 這是因爲我們使用了不同的排序順序。

最初,您使用「dsohtelid,hotelid」。

第二次,您使用「dshotelid desc,hotelid desc」。

這樣做的效果是將您的非空值置於頂端,而將空值置於底部,但是我認爲這是一個很好的解決方案。 你的ID現在向後排序 - 我認爲你可能想避免這種情況,因此我提出了一個新的排序列的建議,它會尊重這一點。

不過,如果ID的順序並不重要,那麼您的解決方案是好的,你可以簡單地堅持你的原代碼,添加的「遞減」,就像這樣:

dtmaintable.DefaultView.Sort = "dshotelid desc, hotelid desc" 

當然,如果我在這裏說的任何東西對你有任何用處,都會非常感謝。這將幫助我達到50個重要點,並最終能夠寫評論。 :)

+0

謝謝,但..它沒有解決我的問題 – 2010-02-02 07:50:19

+0

ID的順序是無關緊要的....我的解決方案工作正常 – 2010-02-06 03:30:38

+0

感謝您的upvote。 :) – GenericMeatUnit 2010-02-06 22:00:00