2016-01-13 62 views
0

我有一個list(of DataRow)(每個包含的行都來自同一個表)。排序列表(DataRow)按Columntype字符串整數,VB

每行包含.item("number")作爲String。 此產品可打印Number

我所需要的是一個快速的功能,即orders the rows.item("number")Ascending列表(1-> 2-> 3-> 4-> 5)

EDIT內部以下是我的響應在這個問題下問我關於我的問題的一個問題! (哇,這是很多問題..)

grpname | grpID | LocationID | info1 | info 2 | Info 3 
    yaya | 2  | 4   | asd | asd  | dasd 
    yaya | 2  | 2   | asd | asd  | dasd 
    yaya | 2  | 3   | asd | asd  | dasd 
    yaya | 2  | 1   | asd | asd  | dasd 
    yaya | 2  | 5   | asd | asd  | dasd 
    yo  | 6  | 4   | asd | asd  | dasd 
    yo  | 6  | 1   | asd | asd  | dasd 
    yo  | 6  | DBNULL  | asd | asd  | dasd 
    yo  | 6  | 2   | asd | asd  | dasd 
    yo  | 6  | 6   | asd | asd  | dasd 

基本上這就是我所擁有的。 我通過閱讀第三方應用程序的數據庫獲取以上信息。我的任務是按照用戶在提到的第三方工具中設置的順序將它們放入漂亮的單詞表中。 LocationID屬於grpID,所以在同一組Datatable中存在組內行的特定順序。 我能夠在正確的組中訂購DataRows。爲了解決將組放入正確位置的問題,我以編程方式將組中的所有行放入一個list(of Datarow),放入List(of List(of DataRow))只要我所有的行在Lists內正確排序,我將對它們重新排序所述DataTable

EDIT 我終於找到了解決自己使用具有以下內容的附加列內(描述爲文本)

Try to put CInt(LocationID) -> if Catch happens (DBNULL): Put 999 
After thats done: Use DataView to Order DataTable by grpID, newColumn 

主它改掉通過GRP訂購,並且當存在多個比同一組的一行它由newColumn命令。

回答

0

我想知道他們爲什麼在List(Of T)時可以很容易地在DataTable中操縱它們。鑑於名單rowList

rowList = rowList.OrderBy(Function(q) q.Item("number")).ToList 
+0

我試圖解釋爲什麼我不使用數據表。解釋在問題的底部。我希望我能夠以一種可以理解的方式解釋它。我會試試這個功能。 您能否向我解釋下列部件究竟做了什麼? '(Function(q)q.Item(「number」))'。 – Luke

+0

看起來像這樣將列排序爲字符串。我需要它作爲Integer命令。另外還有一個問題我還沒有提到, DBNull必須以某種方式處理 – Luke

+0

在我看來,您需要使用數據表。數據表列可以按需要的類型轉換,即需要整數。然後你可以做任何你需要的命令,過濾器等。使用數據表,你將能夠指定OrderBy grpID,LocationID,以便數據按grpID排序,如果你有很多這些按照LocationID排序。 – Mych