En efecto, para empezar, el TemplateField debe ir entre las viñetas <Columns></Columns>
Algo así
Código:
<asp:gridview id="CustomersGridView"
datasourceid="CustomersSource"
autogeneratecolumns="False"
autogenerateselectbutton="True"
allowpaging="True"
selectedindex="1"
onselectedindexchanged="CustomersGridView_SelectedIndexChanged"
onselectedindexchanging="CustomersGridView_SelectedIndexChanging"
runat="server" DataKeyNames="rpe" BackColor="LightGoldenrodYellow"
BorderColor="Tan" BorderWidth="1px" CellPadding="2" ForeColor="Black"
GridLines="None">
<Columns>
<asp:TemplateField HeaderText="Detalle" ItemStyle-Width="70px" HeaderStyle-Width="70px">
<ItemTemplate>
<asp:LinkButton ID="Lnk_Redireccionar" Style="background-color: Transparent; margin-top: -3px;"
CommandName="Detalle" runat="server" CommandArgument='<%#Eval("rpe") %>'>
</asp:LinkButton>
</ItemTemplate>
<HeaderStyle Width="70px" />
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
<AlternatingRowStyle BackColor="PaleGoldenrod" />
<asp:BoundField DataField="rpe"
HeaderText="RPE del Empleado"
InsertVisible="False" ReadOnly="True" ....
Como que fuera un BoundField.
Segundo, dependiendo de la forma en la que llenas el GridView (Usando un DataSource o a puro código) puedes o no utilizar el evento SelectedIndexChanged. En el ejemplo que te propuse anteriormente, utilizo el evento
RowCommand. Si mal no recuerdo, el SelectedIndexChanged no tiene el e.CommandArgument.
Yo te recomiendo usar el evento RowCommand.
Pero si queres usar el SelectedIndexChanged debes decirme cuál es la forma en la que llenas el GrdiView (con DataSource o a puro código) y después tomamos las medidas necesarias.
Saludos...