Событие «Использовать ColumnDisplayIndexChanged» выглядит как правильное. Это сработало для меня. (Я добавил бы комментарий, у меня был представитель для этого.)
Обработчик события для этого события будет содержать e.Column, отражающий новое значение для этого столбца. Свойство, которое вы ищете, - DisplayIndex. Обратите внимание, что событие будет запускаться для каждого столбца, для которого был изменен DisplayIndex.
В vb.net:
Private Sub data_ColumnDisplayIndexChanged(sender As Object, e As System.Windows.Forms.DataGridViewColumnEventArgs) Handles data.ColumnDisplayIndexChanged
Debug.Print(e.Column.DisplayIndex & vbTab & e.Column.Name)
End Sub
Поскольку событие запускается при запуске (несколько раз), вы можете добавить какую-то логику, чтобы предотвратить его запуск при добавлении столбцов или переупорядочении столбцов на основе предыдущих настроек:
Private Sub dataAnts_ColumnDisplayIndexChanged(sender As Object, e As System.Windows.Forms.DataGridViewColumnEventArgs) Handles dataAnts.ColumnDisplayIndexChanged
If bSortingColumns = False Then
Debug.Print(e.Column.DisplayIndex & vbTab & e.Column.Name)
End If
End Sub
Или добавьте обработчик событий программно после завершения кода запуска.
Ссылка MSDN.