Se me presentó la necesidad de tener un gridview con botones, de editar, seleccionar, eliminar y uno botón adicional que realizara otra función.
Primero declaramos nuestro gridview con las columnas que necesitamos y agregamos en un templateField el botón que necesitamos, en este ejemplo agrego 2 y agregamos en la definición del gridview la función OnRowCommand y le decimos que cree una nueva función para este evento.
<asp:GridView ID="GridView1" runat="server" OnRowDeleting ="GridView1_RowDeleting" OnRowEditing ="GridView1_RowEditing" AutoGenerateColumns="False" OnRowUpdating="GridView1_RowUpdating" OnRowCancelingEdit ="GridView1_RowCancelingEdit" OnRowCommand="GridView1_RowCommand">
<Columns>
<asp:TemplateField HeaderText ="Preguntas"><ItemTemplate>
<asp:ImageButton ID="BTPreguntas" runat="server" CausesValidation="False"
CommandName="Select" ImageUrl="~/Imagenes/lapiz.png" CommandArgument="<%# CType(Container, GridViewRow).RowIndex%>"/>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText ="Temas"><ItemTemplate>
<asp:ImageButton ID="BtTemas" runat="server" CausesValidation="False"
CommandName="Select" ImageUrl="~/Imagenes/lapiz.png" CommandArgument="<%# CType(Container,GridViewRow).RowIndex %>"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
en Botón, le agregamos un CommandName, a este le podemos poner el nombre que deseemos, y agregamos tambien un CommandArgument en el cual vamos a pasar el indice de la fila en la que se hizo click al botón con la siguiente instrucción "<%# CType(Container, GridViewRow).RowIndex%>"
Pasando a la parte del código en la función que se creo para el evento
Protected Sub GridView1_RowCommand(sender As Object, e As GridViewCommandEventArgs)
Aquí se escribe el código de la función deseada
End Sub
Aquí podemos leer el CommandName que le pasamos con la instruccion e.CommandName
el CommandArgument con e.CommandArgument con el que podemos recuperar el indice de la fila para obtener algún identificador del registro que deseamos por ejemplo.
Dim etiqueta As Label = GridView1.Rows(e.CommandArgument.ToString).Cells(0).FindControl("Id")
en mi caso tenía una etiqueta con un identificador, por lo que la instrucción de la fila superior me devuelve la etiqueta. en caso de que no tenga un control se puede recuperar el valor con un
GridView1.Rows(e.CommandArgument.ToString).Cells(0).text
También podemos obtener el identificador del botón que se presionó con e.CommandSource.id lo cual nos sirve para poder identificar el botón que se presionó en caso de que tengamos más de un botón creado de está manera. Así podemos programar diferentes funciones para cada botón.
Taa Bueno!!!!!
ResponderBorrar=/
ResponderBorrarLamentablemente no me funciona el e.CommandName cuando agrego un control Button (no un ButtonField) a un Ítem Template. ¿Cómo atrapar qué botón hizo click cuando tengo varios Button en un ItemTemplate?
ResponderBorrar