Pregunta

Tengo un Gridview con ImageButtons agregado a una columna a través de un campo de plantilla. He adjuntado una función a " OnClick " evento.

Una vez en esta función, ¿cómo puedo obtener el índice de la fila que tiene el botón en el que se ha hecho clic? Parece que todo lo que tengo son las coordenadas del mouse en la página.

¿Fue útil?

Solución

En lugar de recorrer las filas, puede usar esto

<asp:ImageButton runat="server" id="ibtn1" ... RowIndex='<%# Container.DisplayIndex %>' 
OnClick="button_click"/>

...

protected void button_click(object sender, EventArgs e){
    ImageButton ibtn1 = sender as ImageButton;
    int rowIndex = Convert.ToInt32(ibtn1.Attributes["RowIndex"]);

    //Use this rowIndex in your code
}

Otros consejos

Transmita el remitente a un ImageButton y luego el NamingContainer del botón de imagen a una fila:

VB:

Dim btn as ImageButton = CType(sender, ImageButton)

Dim row as GridViewRow = CType(btn.NamingContainer, GridViewRow)

C #:

ImageButton btn = (ImageButton)sender;

GridViewRow row = (GridViewRow)btn.NamingContainer;

Estaría de acuerdo con bdukes en que la opción más simple es utilizar el CommandArgument. Enlace el número de identificación único de sus datos en esa propiedad, luego maneje el evento _RowCommand.

Por ejemplo:

<asp:TemplateField >
    <HeaderStyle Width="20" />
    <ItemTemplate>
        <asp:ImageButton ImageUrl="images/icons/iCal.png" CommandArgument='<%# Eval("Event_ID") %>' ToolTip="iCal" runat="server" Height="18" Width="18" />
    </ItemTemplate>
</asp:TemplateField>


Protected Sub gv_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles gv.RowCommand

   e.CommandArgument    'use this value in whatever way you like

End Sub

La forma más fácil que he encontrado es utilizar Evento de comando sobre el Haga clic en el evento y envíe la ID del elemento como argumento de comando.

También puede recorrer las filas en GridView y comparar el ImageButton en la fila con el argumento remitente en su evento Click.

Este es un muy buen truco. Tengo otro truco también. Puedes probarlo ...

 protected void userGridview_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Select")
        {
            GridViewRow rowSelect = (GridViewRow)(((Button)e.CommandSource).NamingContainer);
            int rowindex = rowSelect.RowIndex;
         }
    }

También es un buen método.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top