0

我想我检查了“如果(e.Row.RowType == DataControlRowType.DataRow)”但仍然无法工作“编辑”是单元格[3]“删除”是单元格[4],当我点击编辑按钮时,它会给出我

指定的参数超出了有效值的范围。参数名称:index 说明:当前web请求执行过程中发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.ArgumentOutOfRangeException:指定的参数超出了有效值的范围。参数名称:索引

源错误:

第 252 行:LinkBut​​ton lkDelete = (LinkBut​​ton)gv.Rows[i].Cells[4].Controls[0];

真的不知道哪里错了......

protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                GridView gv = (GridView)sender;

                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    for (int i = 0; i < gv.Rows.Count; i++)
                    {
                        LinkButton lkDelete = (LinkButton)gv.Rows[i].Cells[4].Controls[0];
                        lkDelete.OnClientClick = "return confirm(' Are you sure you want to delete this item?');";
                    }
                }
            }
4

2 回答 2

0

首先,当每个数据行都绑定到 GridView 控件中的数据时,会引发RowDataBound事件。所以你不需要像现在这样循环遍历网格。

其次,除非索引超出范围,否则您的代码似乎找到了,这可能在控件 [0] 处。我的建议是使用 FindControl 代替:

  protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
  {
     if (e.Row.RowType == DataControlRowType.DataRow)
     {
        LinkButton lkDelete = (LinkButton)e.Row.Cells[4].FindControl("lkDeleteId");
        lkDelete.OnClientClick = "return confirm(' Are you sure you want to delete this item?');";
     }
  }

编辑:

在执行您正在执行的操作之前,您仍然需要检查RowType ,因为您不想在 Header、Footer 或 Pager 行中执行此操作。

于 2013-04-04T03:59:56.587 回答
0

每次绑定一行时,您似乎都在遍历每一行。要么删除循环:

if (e.Row.RowType == DataControlRowType.DataRow)
{
    LinkButton lkDelete = (LinkButton)gv.Rows[i].Cells[4].Controls[0];
    lkDelete.OnClientClick = "return confirm(' Are you sure you want to delete this item?');";
}

或在 GUI 中而不是在代码隐藏中添加删除确认:

<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:Button ID="deleteButton" runat="server" CausesValidation="False" CommandName="Delete" Text="Delete" OnClientClick="return confirm('Delete this item?');" />
</ItemTemplate>
</asp:TemplateField>
于 2013-04-04T03:42:38.220 回答