Pergunta

Eu tenho um GridView com ImageButtons adicionados a uma coluna através de um templatefield. Anexei uma função para o evento "onclick".

Uma vez que nesta função, como posso obter o índice da linha que tem o botão que foi clicado. Parece que tudo o que tenho é as coordenadas do mouse na página.

Foi útil?

Solução

Em vez de loop através das linhas que você pode usar este

<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
}

Outras dicas

fundido ao remetente para um ImageButton em seguida, lançar NamingContainer do botão imagem a uma linha:

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;

Concorde com bdukes que a opção mais simples é usar o CommandArgument. Bind número de identificação exclusivo de seus dados em que a propriedade, em seguida, manipular o evento _RowCommand.

Por exemplo:

<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

A maneira mais fácil que eu encontrei é usar o Command evento sobre o Clique evento, e enviar o ID do item como o argumento de comando.

Você também poderia loop sobre as linhas do GridView e comparar o ImageButton na linha para o argumento sender em seu evento Click.

Isso é muito bom truque. Eu tenho um outro truque também. Você pode experimentá-lo ...

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

É um também um bom método.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top