簡體   English   中英

請幫助我在vb.net中為datatable創建排序表達式

[英]please help me in creating a sort expressions for datatable in vb.net

我有一個數據表,其中包含許多列,其中三列是主要的:

  1. hotelid
  2. dshotelid
  3. 酒店名稱

一些酒店僅包含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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM