【问题标题】:Can't get gridview row once templatefield button is clicked单击模板字段按钮后无法获取 gridview 行
【发布时间】:2013-04-21 21:48:06
【问题描述】:

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

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 上的各种方法,希望你们能帮助我。谢谢。

【问题讨论】:

  • 您为什么不引用您正在处理的GridView 的名称? gdvData
  • 在我发现的每一个解决方案中,他们在任何时候都不会引用 Gridview,你能给我举个例子吗???

标签: c# asp.net-mvc-3 gridview


【解决方案1】:

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

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

在我看来,您只需要Id 要删除的数据即可。所以不要尝试使用行的索引,只需将Id 放在按钮的CommandArgument

示例:

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

【讨论】:

  • 那么数据来自一个DataSet,然后绑定到gridview,我应该如何更改数据?
  • 试试:&lt;yourDataSet&gt;.Container.Components.Item[rowIndex]
  • 或者,您也可以使用索引获取 GridViewRow:gdvData.Rows[rowIndex]
  • 好的,我已经使用下一句得到了该行:GridViewRow row = gdvData.Rows[index];但是我怎样才能访问列或单元格??
  • @AndresScarpone,老实说,我不确定您的DataSet 的结构。通常我会绑定DataTable 或更好的对象IEnumberableGridView。你可以试试gridViewRow.DataItem ...但实际上你应该直接与DataSet进行交互。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
  • 2023-03-17
  • 2015-12-25
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
  • 2012-05-14
相关资源
最近更新 更多