Listo, ya lo resolvi.
 
Como agrego las columnas ButtonField dinamicamente, entonces le puedo poner un CommandName, a pues ahi se me prendio el foco, y al CommandName le he puesto el indice de la columna, asi, al ejecutar el RowCommand, leo el CommandName recibido y este va a ser el numero del indice de la columna ke necesitaba obtener. 
Anexo el codigo de como lo hice.  
Código:
 Function LoadGrid() As Nullable
        Dim dc_DataCol As DataColumn
        Dim int_ColIndex As Integer = 0
        With Me.gv_PromoSchedule
            .Columns.Clear()
            'Para cada columna dentro de nuestro DT Schedule, creamos las nuestras con TemplateColumns
            For Each dc_DataCol In Schedule.Columns
                int_ColIndex += 1
                If int_ColIndex Mod 2 <> 0 Then
                    Dim bdfl As New BoundField
                    With bdfl
                        .HeaderText = dc_DataCol.ColumnName
                        .DataField = dc_DataCol.ColumnName
                    End With
                    .Columns.Add(bdfl)
                Else
                    Dim btnfl As New ButtonField
                    With btnfl
                        .HeaderText = dc_DataCol.ColumnName
                        .DataTextField = dc_DataCol.ColumnName
                        .CommandName = int_ColIndex
                        .CausesValidation = False
                        .AccessibleHeaderText = dc_DataCol.ColumnName
                    End With
                    .Columns.Add(btnfl)
                End If
            Next
            .DataSource = Schedule()
            .DataBind()
        End With
        Return Nothing
    End Function