Hi
OK, here is the basis for exactly what you want.
' Form1 with DataGridView1
Option Strict On
Option Explicit On
Public Class Form1
Dim Persons As New DataTable
Dim BS As New BindingSource
' random just to aid making sample data
Dim rand As New Random
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
With Persons
.Columns.Add("Name", GetType(String))
.Columns.Add("Age", GetType(Integer))
.Columns.Add("Sex", GetType(String))
.Columns.Add("Email", GetType(String))
.Columns.Add("Phone", GetType(String))
.Columns.Add("Address", GetType(String))
' make some random test data
For i As Integer = 1 To 10
.Rows.Add("Name " & i.ToString, rand.Next(9, 99), ({"Male", "Female", "N/A"})(rand.Next(0, 3)), "EMail" & i.ToString, "0" & rand.Next(123, 888).ToString & " " & rand.Next(1000000, 9999999).ToString, rand.Next(99).ToString & " Some Street")
Next
End With
Dim ndt As DataTable = Transpose(Persons)
BS.DataSource = ndt
DataGridView1.DataSource = BS
With DataGridView1
.ColumnHeadersVisible = False
.Rows(0).Cells(0).Value = String.Empty
End With
End Sub
Function Transpose(dt As DataTable) As DataTable
Dim dt2 As New DataTable()
For i As Integer = 0 To dt.Rows.Count
dt2.Columns.Add()
Next
For i As Integer = 0 To dt.Columns.Count - 1
dt2.Rows.Add()
dt2.Rows(i)(0) = dt.Columns(i).ColumnName
Next
For i As Integer = 0 To dt.Columns.Count - 1
For j As Integer = 0 To dt.Rows.Count - 1
dt2.Rows(i)(j + 1) = dt.Rows(j)(i)
Next
Next
Return dt2
End Function
Public Class Person
Public Property Name As String
Public Property Age As Integer
Public Property Sex As String
Public Property Email As String
Public Property Phone As String
Public Property Address As String
End Class
End Class