ASP.NET格式化访问gridview中的行的异常异常

时间:2017-01-16 01:05:15

标签: c# asp.net gridview

我有这个asp.net控件:

<div class="field" style="text-align: center;">
    <asp:GridView ID="gvTags" runat="server" AutoGenerateColumns = "false"
        OnRowDataBound="OnRowDataBound" OnRowDeleting="OnRowDelete">
        <Columns>
            <asp:BoundField DataField="tagId" HeaderText="Id" />
            <asp:BoundField DataField="name" HeaderText="<%$ Resources:Common, tlblTags %>" />
            <asp:CommandField ShowDeleteButton="True" ButtonType="Button" />
        </Columns>
    </asp:GridView>
</div>

我从数据库中检索的集合中绑定了这样的数据源:

this.gvTags.DataSource = product.Tags;
this.gvTags.DataBind();

OnRowDataBound我创建了一个弹出窗口,以便在单击删除按钮时显示,所以代码是这样的:

protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        string item = e.Row.Cells[1].Text;

        foreach (Button button in e.Row.Cells[2].Controls.OfType<Button>())
        {
            if (button.CommandName == "Delete")
            {
                button.Attributes["onclick"] = "if(!confirm('Do you want to delete " + item + "?')){ return false; };";
            }
        }
    }
}

这工作正常,我可以在浏览器中看到三行,并且所有工作都按预期工作(弹出窗口显示正确的信息等)。但问题是当我接受弹出窗口时,OnRowDelete事件被触发。

我想用特定的tagId从数据库中删除一个Tag,所以我需要在当前行获取位置0,所以这是我的代码:

protected void OnRowDelete(object sender, GridViewDeleteEventArgs e)
{
    int index = Convert.ToInt32(e.RowIndex);
    GridViewRow row = this.gvTags.Rows[index];
    long tagId = Convert.ToInt64(row.Cells[0].Text);

    /* Remove the tag */
    productService.RemoveTag(productId, tagId);

    /* Delete the row from gridview */
    this.gvTags.DeleteRow(index);
}

我得到的错误就在这一行:GridViewRow row = this.gvTags.Rows[index];。我得到System.ArgumentOutOfRangeException,但我不明白为什么。 index变量采用有效的int值,如0,1 ...

关于我做错了什么的任何想法?感谢。

0 个答案:

没有答案