Hi @Mansour_Dalir ,
You can refer to this link to the solution in C#, below is the code in the VB.net.
Private Sub dgv_ColumnDisplayIndexChanged(sender As Object, e As DataGridViewColumnEventArgs) Handles dgv.ColumnDisplayIndexChanged
Dim g As DataGridView = DirectCast(sender, DataGridView)
Dim propertyInfo As Reflection.PropertyInfo = GetType(DataGridViewColumn).GetProperty("DisplayIndexHasChanged", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance)
If g.Columns.Cast(Of DataGridViewColumn)().Any(Function(x) DirectCast(propertyInfo.GetValue(x), Boolean)) Then
Return
Else
Dim columnTitlesArray() As String = dgv.Columns.Cast(Of DataGridViewColumn)() _
.OrderBy(Function(column) column.DisplayIndex) _
.Select(Function(column) column.HeaderText) _
.ToArray()
For Each columnTitle As String In columnTitlesArray
Console.WriteLine(columnTitle)
Next
End If
End Sub