[英]please help me in creating a sort expressions for datatable in vb.net
我有一個數據表,其中包含許多列,其中三列是主要的:
一些酒店僅包含dshotelid,一些僅包含hotelid,而一些同時包含dshotelid和hotelid。
我需要以這樣的方式進行排序,以便同時擁有dshotelid和hotelid的那些酒店應該排在最前面,然后只有dshotelid的那些酒店以及最后那些僅具有hotelid的酒店……
請幫助我創建這樣的排序表達式。
我創建了這個:
dtmaintable.DefaultView.Sort = "dshotelid, hotelid"
但是它沒有給我想要的輸出。
其中帶有NULL的字段通常會出現在已排序的列的頂部(除非排序按降序排列),因此您可能會看到底部(而不是頂部)同時有hotelid和dshotelid的行?
該數據表如何填充? 如果它來自數據庫查詢,那么構造一個額外的列(包含所需的任何排序鍵)就很簡單了,它可以是其他列的集合或其他唯一標識符。
編輯:2010年2月4日-回應您的'FilterAndSortTable'解決方案:
您的解決方案有效,但這不是因為FilterAndSortTable而是因為您使用了不同的排序順序。
最初,您使用的是“ dsohtelid,hotelid”。
第二次,您使用了“ dshotelid desc ,hotelid desc ”。
這樣可以將非null放在頂部,而null放在底部,但是我會懷疑這是一個很好的解決方案。 您的ID現在已向后排序-我以為您可能想避免這種情況,因此,我建議您使用一個新的排序列,以尊重這一點。
不過,如果id的順序無關緊要,那么您的解決方案就可以了,您可以簡單地堅持使用原始代碼,並加上'desc',如下所示:
dtmaintable.DefaultView.Sort = "dshotelid desc, hotelid desc"
當然,如果我在這里所說的任何事情對您有用,那么不勝感激。 這將幫助我達到50個代表點,並最終能夠發表評論。 :)
我得到的答案是:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.