我无法在gridview中获取rowdeleting来删除数据库条目

时间:2016-12-12 11:10:26

标签: c# sql asp.net gridview

我目前正在使用Visual Studio在C#中创建一个asp.net Web应用程序。我一直坚持同样的问题一段时间,并尝试了很多解决方案。我需要有一个页面,在加载时,显示存储在数据库表中的一些信息(在前一页上注册的孩子的名字,dob和用户名(PK)。

使用此数据填充网格视图没有问题,但我需要在每个子项旁边都有删除按钮/链接,从数据库表中完全删除子项。这是我无法开展的工作。我的代码是一个完整的混乱,充满了我正在尝试新事物的注释部分。截至目前,我已将其缩放回一段简单的代码,并且在gridview中的任何子项旁边单击“删除”时出现错误。

在gridview中启用删除功能真的很难吗?我提供了截图以及我的代码。如果有人能指出我哪里出错了,我会非常感激!提前谢谢。

Screenshot of error I get when hitting delete

.CS代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
using System.Diagnostics;
using System.Collections;
using System.Configuration;

namespace Coursework
{
public partial class viewandremove : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        using (SqlConnection connect = new SqlConnection("Data Source=THEBEAST;Initial Catalog=newregDB;Integrated Security=True;Pooling=False"))
        using (SqlCommand cmd = new SqlCommand("SELECT [firstname], [dob], [ChildID] FROM [children]", connect))
        {
            connect.Open();
            SqlDataAdapter sda = new System.Data.SqlClient.SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            GridView1.DataSource = dt;
            GridView1.DataBind();
            connect.Close();
        }
    }

    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {

    }      
    protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
    {

    }

    protected void Gridview1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {          
        using (SqlConnection connect = new SqlConnection("Data Source=THEBEAST;Initial Catalog=newregDB;Integrated Security=True;Pooling=False"))
        using (SqlCommand cmd = new SqlCommand("DELETE FROM children where childID=", connect))
        {
            connect.Open();
            SqlDataAdapter sda = new System.Data.SqlClient.SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            GridView1.DataSource = dt;
            GridView1.DataBind();
            connect.Close();
        }
    }
}

}

消息来源代码:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="viewandremove.aspx.cs" Inherits="Coursework.viewandremove" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<p>
    <br />
    <asp:GridView ID="GridView1" runat="server" AutoGenerateDeleteButton="True" OnSelectedIndexChanged="GridView1_SelectedIndexChanged" OnRowDeleting="Gridview1_RowDeleting" DataKeyNames="childID" OnSelectedIndexChanging="GridView1_SelectedIndexChanging">
    </asp:GridView>
</p>
<p>
</p>
<p>
</p>

4 个答案:

答案 0 :(得分:1)

您可以在不编码的情况下实现删除功能,并且只能使用设计器。因此,为SqlDataSource添加GridView,在其配置窗口中单击Advance,然后选中生成INSERT,UPDATE和DELETE语句的复选框。就这些。稍后,您可以修改生成的代码。

答案 1 :(得分:0)

您的cs代码和图片彼此不同。如果你使用删除命令,你应该改为'从xxx删除yyy'格式。但你的选择命令似乎没问题。

答案 2 :(得分:0)

使用删除时,不得使用列名。这是错误的。正确的格式是:从&#34; tablename&#34;删除哪里....

答案 3 :(得分:0)

之前清除书签
 string ChildID=GridView1.DataKeys[e.RowIndex].Value.ToString();

并更新请求

DELETE FROM [children] where [ChildID]='"+ChildID+"'