將兩個DataRow Array合併後排序(使用Array.Sort)

將兩個DataRow Array合併後排序(使用Array.Sort)

前言

發現有需要將2個DataRow Array合併後再排序! 合併時可以使用ArrayList把它們都加進去,然後再使用Array Sort來處理排序。

實作

    • 先建立2個DataRow Array
Dim drRows1(11) As DataRow
Dim drRows2(5) As DataRow

With dtClass.Columns
    .Add("C1", Type.GetType("System.String"))
    .Add("ORDER", Type.GetType("System.String"))
End With

For i As Integer = 0 To 11
    Dim drClass As DataRow = dtClass.NewRow
    drClass("C1") = i
    drClass("ORDER") = i
    drRows1(i) = drClass
Next

For i As Integer = 0 To 5
    Dim drClass As DataRow = dtClass.NewRow
    drClass("C1") = i
    drClass("ORDER") = i
    drRows2(i) = drClass
Next

    • 將這2個DataRow合併到ArrayList變數之中
'因為要區分那個DaraRow,所以多一個欄位來註記
drRows1(0).Table.Columns.Add("Flag", Type.GetType("System.String"))
For Each drItem As DataRow In drRows1
    drItem("Flag") = "1"
    drRowsMerge.Add(drItem)
Next
For Each drItem As DataRow In drRows2
    drItem("Flag") = "2"
    drRowsMerge.Add(drItem)
Next

 

    • 建立DataRow的比較類別
    Implements IComparer(Of DataRow)

    Public Function Compare(ByVal x As System.Data.DataRow, ByVal y As System.Data.DataRow) As Integer Implements System.Collections.Generic.IComparer(Of System.Data.DataRow).Compare
        If x("ORDER") < y("ORDER") Then
            Return -1
        ElseIf x("ORDER") > y("ORDER") Then
            Return 1
        Else
            Return 0
        End If
    End Function
End Class

    • 使用Array.Sort進行排序(newDRs 會依SORT欄位排序)
Dim newDRs() As DataRow = drRowsMerge.ToArray(GetType(DataRow))
Array.Sort(newDRs, comp)

可以看排序前及排序後的字串

image

結論

使用比較類別要注意比較的資料型態,像我上面所使用的是字串,所以10就會排在2的上面。

測試範例:DataRowSort.rar

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^