Hi @AMER SAID ,
You can refer to the following method to generate the table:
Public Function GenerateTable(ByVal sourceTable As DataTable) As DataTable
Dim newTable As DataTable = New DataTable()
newTable.Columns.Add("STU_TEST")
Dim TArr As List(Of String) = New List(Of String)()
For Each row As DataRow In sourceTable.Rows
Dim columnName As String = row.ItemArray(0).ToString()
Dim rowName As String = row.ItemArray(2).ToString()
If Not newTable.Columns.Contains(columnName) Then
newTable.Columns.Add(columnName)
End If
If Not TArr.Contains(rowName) Then
TArr.Add(rowName)
End If
Next
For Each TValue As String In TArr
Dim row As DataRow = newTable.NewRow()
row(0) = TValue
For i As Integer = 1 To newTable.Columns.Count - 1
row(i) = sourceTable.AsEnumerable().Where(Function(x) (x.Field(Of String)("STU_NAME") = newTable.Columns(i).ColumnName) AndAlso (x.Field(Of String)("STU_TEST") = TValue)).Select(Function(x) x.Field(Of String)("STU_RATE")).FirstOrDefault()
Next
newTable.Rows.Add(row)
Next
Return newTable
End Function
Code in my test:
Dim dt As DataTable = New DataTable()
dt.Columns.Add("STU_NAME")
dt.Columns.Add("STU_RATE")
dt.Columns.Add("STU_TEST")
dt.Rows.Add("ALIE", "0", "T1")
dt.Rows.Add("SAIED", "", "T1")
dt.Rows.Add("EBRAHIM", "#", "T1")
dt.Rows.Add("ALIE", "0", "T2")
dt.Rows.Add("SAIED", "NOT", "T2")
dt.Rows.Add("EBRAHIM", "1", "T2")
dt.Rows.Add("SALIM", "NOT", "T2")
dt.Rows.Add("MAHER", "2", "T2")
Dim newTable As DataTable = GenerateTable(dt)
Result:
Hope it could be helpful.
Best Regards,
Xingyu Zhao
*
If the answer is helpful, please click "Accept Answer" and upvote it.
Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.