將兩個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)
可以看排序前及排序後的字串
結論
使用比較類別要注意比較的資料型態,像我上面所使用的是字串,所以10就會排在2的上面。
測試範例:DataRowSort.rar
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^