0

当单击 aButton时,GridView我似乎无法获得行索引或要消除的行,我需要存档的 Id 和 Complete 路径,它们都在 的绑定字段上GridView,这里是我的代码:

网格视图代码:

<asp:GridView ID="gdvData"
              AllowSorting="False" 
              AllowPaging="True" 
              AutoGenerateColumns="False" 
              AutoGenerateDeleteButton="False" 
              runat="server" 
              EmptyDataText="No existen archivos cargados." 
              Width="100%">
    <AlternatingRowStyle CssClass="alternatingrowstyle" />
    <Columns>
        <asp:BoundField HeaderText="Id"
                   DataField="Id"
                   Visible="false" >
       <HeaderStyle CssClass="left" />
       <ItemStyle CssClass="left" />
       </asp:BoundField>
       <asp:BoundField HeaderText="RutaCompleta"
                   DataField="RutaCompleta"
                   Visible="false" >
       <HeaderStyle CssClass="left" />
       <ItemStyle CssClass="left" />
       </asp:BoundField>
        <asp:TemplateField HeaderText="Archivo">
            <ItemTemplate>          
                <asp:HyperLink runat="server"
                               CssClass="left"  
                               Target="_blank" 
                               NavigateUrl='<%#Eval("RutaCompleta")%>'  
                               Text='<%#Eval("Archivo")%>'> 
                </asp:HyperLink>             
            </ItemTemplate>
            <HeaderStyle CssClass="left" />
            <ItemStyle HorizontalAlign="left" />
        </asp:TemplateField>
        <asp:TemplateField HeaderImageUrl="~/Images/page_delete.ico"
                           HeaderText="Eliminar">
           <ItemTemplate>
           <asp:ImageButton ID="ImgDelete"
                            runat="server" 
                            CommandArgument="Delete"
                            ImageUrl="~/Images/page_delete.ico" 
                            OnClick="btnEliminar_Click"
                            OnClientClick="return confirm('¿Esta seguro de eliminar este archivo?');" 
                            ToolTip="Borrar Documento"/>                                                      
           </ItemTemplate>
           <HeaderStyle CssClass="center" />
           <ItemStyle CssClass="center"/>
        </asp:TemplateField> 
    </Columns>
    <HeaderStyle CssClass="headerstyle" />
    <PagerStyle CssClass="pagerstyle" />
    <PagerTemplate>
        <asp:Label ID="Label1" runat="server" Text="Mostrar filas:" />
        <asp:DropDownList   ID="ddlPageSize" 
                            runat="server" 
                            AutoPostBack="true" 
                            CssClass="CombosBox"
                            >
            <asp:ListItem Value="10" />
            <asp:ListItem Value="15" />
            <asp:ListItem Value="20" />
        </asp:DropDownList>
        <asp:Label ID="lblDesde" runat="server" Text="Página" />
        <asp:TextBox    ID="txtGoToPage" 
                        runat="server" 
                        AutoPostBack="true" 
                        CssClass="gotopage"
                        />
        <asp:Label ID="lblHasta" runat="server" Text="de " />
        <asp:Label ID="lblTotalNumberOfPages" runat="server" />
        <asp:Button ID="btnAnt" 
                    runat="server" 
                    CommandArgument="Prev" 
                    CommandName="Page" 
                    CssClass="previous" 
                    ToolTip="ant. página" />
        <asp:Button ID="btnProx" 
                    runat="server" 
                    CommandArgument="Next" 
                    CommandName="Page" 
                    CssClass="next" 
                    ToolTip="prox. página" />
    </PagerTemplate>
</asp:GridView>

代码背后:

protected void btnEliminar_Click(object sender, EventArgs e)
{
    try
    {
        Int64 intId = 0;
        String strRutaCompleta = String.Empty;

        GridViewRow row = (GridViewRow)(sender as Control).Parent.Parent;
        Label lblId = (Label)row.FindControl("lblId");
        Label lblRutaCompleta = (Label)row.FindControl("lblRutaCompleta");

        intId = Convert.ToInt64(lblId.Text.ToString());
        strRutaCompleta = lblRutaCompleta.Text.ToString();

        /*Other part of the code*/
    }
    catch(Exception)
    {
        /*Other part of the code*/
    }
}

我已经尝试过 StackOverflow 上的各种方法,希望你们能帮助我。谢谢。

4

1 回答 1

0

.Parent.Parent我建议不要使用,而是使用 的CommandArgument属性ImageButton并设置数据项的Id.

这是 StackOverflow 上的另一篇文章,它提供了大量代码:ASP.NET GridView RowIndex As CommandArgument

在我看来,您所需要的只是Id您要删除的数据。因此,不要尝试使用行的索引,只需IdCommandArgument

例子:

<asp:ImageButton ID="ImgDelete"
                  runat="server" 
                  CommandArgument="Delete"
                  ImageUrl="~/Images/page_delete.ico" 
                  OnClick="btnEliminar_Click"
                  CommandArgument='<%#Eval("Id")%>'
                  OnClientClick="return confirm('¿Esta seguro de eliminar este archivo?');" 
                  ToolTip="Borrar Documento"/>

代码背后:

protected void btnEliminar_Click(object sender, EventArgs e)
{
    try
    {
        Int64 intId = 0;
        ImageButton btn = (sender as ImageButton)
        if(btn != null)
        {
            Int64 tempId;
            if(Int64.TryParse(btn.CommandArgument, out tempId))
            {
                intId = intId;

                /*Other part of the code*/
            }
        }
    }
    catch(Exception)
    {
        /*Other part of the code*/
    }
}
于 2013-04-28T14:34:18.080 回答