2012-01-05 81 views
-1

嗨我所有的問題與dataview從數據庫中獲取數據(Col1:ID,Col2:Time) 和我按時間排序desc ...當例如{40.21,80.21 ,70.25,25.2} dataview按照我的需要對它們進行排序,但是當其中一個值超過100時,例如{40.21,80.21,100.25,25.2},dataview總是排序最高的數字是buttom,我不知道爲什麼..這是一個示例代碼事先使用DataView排序

Dim dt As New DataTable 
     dt.Columns.Add("ID") 
     dt.Columns.Add("Time") 

     dt.Rows.Add(New String() {"1", "90.24"}) 
     dt.Rows.Add(New String() {"2", "80.25"}) 
     dt.Rows.Add(New String() {"3", "70.22"}) 
     dt.Rows.Add(New String() {"4", "102.12"}) 

     Dim dv As New DataView(dt) 
     dv.Sort = "Time Desc" 

謝謝...

+0

我不知道但'DESC'試着'Desc' – Pratik 2012-01-05 09:38:36

+0

也指定類型,dt.Columns.Add(「Time」,Type.GetType(「System.Double」)) – Pratik 2012-01-05 09:44:23

+2

你正在對一個String進行排序,所以你期望什麼? 「10000」比「2」低,因爲「1」按字母順序低於「2」。 – 2012-01-05 09:45:10

回答

-1
dt.Rows.Add(New String() {"1", "90.24"}) 

更改爲

dt.Rows.Add(New Integer() {"1", "90.24"}) 
+0

這既不會編譯(選項嚴格)也不是一個解決方案,因爲OP肯定不想要更改數據以獲得正確的排序。 – 2012-01-05 13:47:07

4

您正在對字符串進行排序,那麼您有什麼期望? 「10000」低於「2」,因爲「1」按字母順序低於「2」,就像「abbbb」低於「b」一樣。

您需要使用正確的數據類型(在這種情況下,我認爲Double),以獲得正確的(數字)排序:

Dim dt As New DataTable 
dt.Columns.Add("ID", GetType(Int32)) 
dt.Columns.Add("Time", GetType(Double)) 

dt.Rows.Add(1, 90.24) 
dt.Rows.Add(2, 80.25) 
dt.Rows.Add(3, 70.22) 
dt.Rows.Add(4, 102.12) 

Dim dv As New DataView(dt) 
dv.Sort = "Time Desc" 

結果:

4 102,12 
    1 90,24 
    2 80,25 
    3 70,22