首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能通过GridView(PosgtesQL)命令删除_RowDeleting中的行

不能通过GridView(PosgtesQL)命令删除_RowDeleting中的行
EN

Stack Overflow用户
提问于 2018-09-07 08:34:23
回答 1查看 47关注 0票数 0

我有asp.net web应用程序,我需要删除与PostgreSQL一起工作的GridView1中的行。我需要删除行,但不必使用ObjectDataSource。下面是我的GridView1_RowDeleting方法:

代码语言:javascript
复制
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        int ID2 = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values[0]);


        string constr = ConfigurationManager.ConnectionStrings["postgresConnectionString"].ConnectionString;
        using (NpgsqlConnection cn = new NpgsqlConnection(constr))
        {
            string query = "DELETE FROM mainpage WHERE id=@ID";
            NpgsqlCommand cmd = new NpgsqlCommand(query, cn);
            cmd.Parameters.Add("@ID2", NpgsqlDbType.Integer).Value = ID2;
            cn.Open();
            cmd.ExecuteNonQuery();
        }     

下面是我在.aspx文件中的.aspx文件:

代码语言:javascript
复制
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None" Width="1650px" AutoGenerateDeleteButton="True" OnRowDeleting="GridView1_RowDeleting" >

每次单击delete按钮,都会出现错误:"Index超出范围。索引必须是正数,其大小不应超过集合的大小。参数名称: index“。我觉得我的int Id有问题。我试过的是:

代码语言:javascript
复制
int ID = (int)GridView1.DataKeys[e.RowIndex].Value;
string ID = GridView1.DataKeys[e.RowIndex].Value.ToString(); and much more...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-07 08:59:41

我认为出现ArgumentOutOfRangeException是因为您没有在网格上设置DataKeyNames属性属性,因此在调用e.RowIndex时行索引仍然超出范围。您应该将其设置为ID/主键列名,如下所示:

代码语言:javascript
复制
DataKeyNames="[ID or PK column name]"

下面是一个示例用法:

代码语言:javascript
复制
<asp:GridView ID="GridView1" runat="server" DataKeyNames="id" 
              AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None" 
              Width="1650px" AutoGenerateDeleteButton="True" OnRowDeleting="GridView1_RowDeleting">
</asp:GridView>

更新1

此外,我在此查询中发现参数名称不匹配:

代码语言:javascript
复制
string query = "DELETE FROM mainpage WHERE id=@ID";
NpgsqlCommand cmd = new NpgsqlCommand(query, cn);
cmd.Parameters.Add("@ID2", NpgsqlDbType.Integer).Value = ID2;

正确的例子应该如下所示:

代码语言:javascript
复制
string query = "DELETE FROM mainpage WHERE id=@ID";
NpgsqlCommand cmd = new NpgsqlCommand(query, cn);
cmd.Parameters.Add("@ID", NpgsqlDbType.Integer).Value = ID2;

参考资料:GridView.DataKeyNames性质

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52218575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档