【问题标题】:delete gridview row Programmatically以编程方式删除gridview行
【发布时间】:2012-08-20 15:19:55
【问题描述】:

尝试删除 gridview 中的一行时,我一直返回错误(输入字符串的格式不正确)

不知道我做错了什么。有什么帮助吗?

<asp:GridView ID="favoritesGrid" runat="server" OnRowDeleting ="favoritesGrid_RowDeleting">
    <columns>
        <asp:CommandField HeaderText="Delete" ShowDeleteButton="True"/>
        <asp:BoundField HeaderText="FavoritesId" DataField="FavoritesId"/>
        <asp:TemplateField HeaderText="Site Name">
             <ItemTemplate>
                 <asp:HyperLink ID="myHyperlink"
                                Text='<%# Eval("SiteName") %>'
                                NavigateUrl='<%# Eval("Url") %>'
                                runat="server">

                 </asp:HyperLink>
             </ItemTemplate>
        </asp:TemplateField>

    </columns>
</asp:GridView>



   protected void favoritesGrid_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        var delId = Convert.ToInt32(favoritesGrid.Rows[e.RowIndex].Cells[0].Text);
        //var id = favoritesGrid.Rows[e.RowIndex].Cells[0].Text;
        var delFavorites = new FavoritesDb();
        var delFavs = delFavorites.DeleteFavorite(delId);
        DataBind();
    }

【问题讨论】:

  • 你能显示你得到的异常并指出它被抛出的位置吗?
  • 输入字符串的格式不正确。关于“var delId = Convert.ToInt32(favoritesGrid.Rows[e.RowIndex].Cells[0].Text);”

标签: asp.net c#-4.0 gridview webforms delete-row


【解决方案1】:

位置 0 的单元格中包含单词“delete”,无法转换为 int。 你需要使用:

var delId = Convert.ToInt32(favoritesGrid.Rows[e.RowIndex].Cells[1].Text);

但是,这不是一个好方法,因为您可能会更改单元格的顺序或添加一个新的。您最好使用 DataKeyNames 属性。

aspx:

<asp:GridView DataKeyNames="FavoritesId" ...>

C#:

Convert.ToInt32(favoritesGrid.DataKeys[e.RowIndex].Value);

【讨论】: