У меня была та же проблема. Первоначально у меня был DataGridView в отдельной форме, и он прекрасно работал со столбцом кнопки - который я добавляю в код после настройки источника данных. Однако, когда я решил переместить сетку на другую форму с помощью элемента управления с вкладками (как это происходит на странице с вкладками (2)), индекс столбца кнопки продолжал возвращаться к нулю. Конечно, в сетке он выглядел совершенно нормально, то есть в правильном физическом расположении, и если я прошел по коду в режиме отладки, индекс не изменился, но при запуске программы он изменился! Очень расстраивает.
Я решил это, установив на вкладке страницу, на которой была расположена моя сетка, ДО установки источника данных.
Мой простой процесс был таким (я использую VB10):
TabControl1.SelectedIndex = 2 ' this is where the datagridview is
MyGrid.DataSource = Nothing
MyGrid.Columns.Clear
'Я выполняю команду Sql в DataReader, затем заполняю DataTable и затем назначаю ее сетке
MyGrid.DataSource = MyDataTable
'Теперь добавьте столбец кнопок
Dim btnCol as New DatGridViewButtonColumn
MyGrid.Columns.Add(btnCol)