none
Obtener el index de un GridView desde un ImageButton con RowCommand

    Pregunta

  • Hola. Tengo la siguiente inquietud. Como puedo obtener el index de un GridView desde un ImageButton con RowCommand. Actualmente siempre me trae un index de 5 y no entiendo porque. Acá el código:

    <asp:GridView ID="grvImagenes" runat="server" CssClass="table table-striped table-bordered table-hover table-vcenter labelTablas"
                                AutoGenerateColumns="false" OnRowCommand="grvImagenes_RowCommand"  DataKeyNames="NombreArchivo_" HeaderStyle-HorizontalAlign="Center" RowStyle-HorizontalAlign="Center"
                                RowStyle-VerticalAlign="Middle" AlternatingRowStyle-VerticalAlign="Middle" SelectedRowStyle-VerticalAlign="Middle">
                                <Columns>
                                    <asp:TemplateField HeaderText="Descripción Español" SortExpression="Descripcion_ESP" ItemStyle-VerticalAlign="Middle" ItemStyle-HorizontalAlign="Center" HeaderStyle-HorizontalAlign="Center">
                                        <ItemTemplate>
                                             <asp:Label ID="Label1a" runat="server" Text='<%# Bind("NombreArchivo_") %>' ></asp:Label>
                                        </ItemTemplate>
                                        <ItemStyle VerticalAlign="Middle" />
                                    </asp:TemplateField>
                                    <asp:TemplateField HeaderText="Imagen" SortExpression="NombreIndustria_ESP" ItemStyle-VerticalAlign="Middle" ItemStyle-HorizontalAlign="Center" HeaderStyle-HorizontalAlign="Center">
                                        <ItemTemplate>
                                            <img src='<%#Eval("Archivo_")%>' alt="Image" height="90" width="90" id="imagencentrar"/>
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:TemplateField HeaderText="Eliminar" ItemStyle-HorizontalAlign="Center" HeaderStyle-HorizontalAlign="Center">
                                        <ItemTemplate>
                                            <asp:ImageButton ID="btnEliminar" runat="server" ImageUrl="~/Content/Images/document_delete.png" Height="22px" Width="22px"
                                                CommandName="Eliminar" AlternateText="Eliminar" />               
                                        </ItemTemplate>
                                </asp:TemplateField>  
                                </Columns>
                            </asp:GridView>

    Y el código:

    GridViewRow row = (GridViewRow)(((ImageButton)e.CommandSource).NamingContainer);
                    int id = (int)grvImagenes.DataKeys[row.RowIndex].Value;
    Gracias

    jueves, 12 de julio de 2018 18:45

Todas las respuestas

  • hola

    pero ese codigo lo defines dentro del grvImagenes_RowCommand ? porque si es asi no se usa el NamingContainer, es directo

    [ASP.NET][GridView] - Como seleccionar una fila

    analiza el articulo veras que puedes usar el e.CommandArgument, esto es porque defines  CommandName="Eliminar"  en el image

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 12 de julio de 2018 19:09
  • Igual Leandro .. siempre me trae el ultimo index, para mi caso es 5. Por qué puede suceder esto?

    Y efectivamente lo hago dentro del grvImagenes_RowCommand

    protected void grvImagenes_RowCommand(object sender, GridViewCommandEventArgs e)
            {
                if (e.CommandName == "Select")
                {
                    int index = Convert.ToInt32(e.CommandArgument);
                }
    }

    El código anterior siempre me trae un 5 cuando hago click sobre el botón.

    viernes, 13 de julio de 2018 1:00