Public Shared Function OrdinalingDataTableRows(ByRef dataTable As DataTable, valueColumnName As String, ordinalColumnName As String, Optional numbering As Boolean = False) As DataTable
If Not dataTable.Columns.Contains(ordinalColumnName) Then
dataTable.Columns.Add(ordinalColumnName, GetType(String))
ElseIf Not dataTable.Columns(ordinalColumnName).DataType Is GetType(String) Then
dataTable.Columns.Add(ordinalColumnName & "_", GetType(String))
ordinalColumnName = ordinalColumnName & "_"
End If
Dim dicOrdinals As New Dictionary(Of Double, String), ordinals = { _
"الأول", "الثاني", "الثالث", "الرابع", "الخامس", "السادس", "السابع", "الثامن", "التاسع", "العاشر", _
"الحادي عشر", "الثاني عشر", "الثالث عشر", "الرابع عشر", "الخامس عشر", "السادس عشر", "السابع عشر", "الثامن عشر", "التاسع عشر", "العشرين", _
"الحادي والعشرين", "الثاني والعشرين", "الثالث والعشرين", "الرابع والعشرين", "الخامس والعشرين", "السادس والعشرين", "السابع والعشرين", "الثامن والعشرين", "التاسع والعشرين", "الثلاثين"}
Dim values = (From x In dataTable.Rows Order By x(valueColumnName) Descending Select x(valueColumnName) Distinct).ToArray
For index = 0 To ordinals.Count - 1
If index = values.Count Then Exit For
dicOrdinals.Add(values(index), ordinals(index))
Next
Array.ForEach(dataTable.Rows.OfType(Of DataRow).ToArray, Sub(r As DataRow) r(ordinalColumnName) = DBNull.Value)
For Each row As DataRow In dataTable.Rows
Dim value = row(valueColumnName)
Dim ors = row(ordinalColumnName)
Dim count = (From x In dataTable.Rows Where Not IsDBNull(x(ordinalColumnName)) AndAlso x(valueColumnName) = value).Count
Dim v = row(valueColumnName)
If dicOrdinals.ContainsKey(row(valueColumnName)) Then
row(ordinalColumnName) = dicOrdinals(row(valueColumnName))
If count > 0 Then
If numbering Then
row(ordinalColumnName) &= Space(1) & "(" & count + 1 & ")"
For Each row2 As DataRow In dataTable.Rows
If Not IsDBNull(row2(ordinalColumnName)) AndAlso row2(ordinalColumnName).Equals(dicOrdinals(row(valueColumnName))) Then
row2(ordinalColumnName) &= Space(1) & "(1)"
End If
Next
Else
row(ordinalColumnName) &= Space(1) & "(مكرر)"
End If
End If
End If
Next
Return dataTable
End Function