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