Я бы предложил отказаться от использования индексов столбцов и начать использовать ключи данных для ссылки на значения столбцов в выделенном коде.Таким образом, вы можете изменить разметку и перемещать столбцы, не влияя на выделение кода.
<asp:GridView ID="GridView1" runat="server" DataKeyNames="Col1, Col2, Col3" ... >
Используя ключи данных, вы можете получить значения столбцов, например, в событии RowDataBound
:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
string col1 = GridView1.DataKeys[e.Row.RowIndex]["Col1"].ToString();
}