【问题标题】:I can't get rowdeleting in gridview to delete database entry我无法在 gridview 中删除行删除数据库条目
【发布时间】:2016-12-12 11:10:26
【问题描述】:

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

用这些数据填充网格视图没有问题,但我需要在每个子项旁边都有删除按钮/链接,以便从数据库表中完全删除子项。这是我无法上班的地方。我的代码一团糟,充满了我尝试新事物的注释部分。截至目前,我已将其缩减为一段简单的代码,当单击 gridview 中任何子项旁边的删除时出现错误。

gridview的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>

【问题讨论】:

  • 您必须编辑您的请求以删除 [children] where [ChildID] =
  • 是的,你的 sql 语法坏了。您不会从表中删除列,而是删除完整的记录。如果您离开 WHERE 部分,每次您在 gridview 中删除一条记录时,它都会删除所有记录。
  • 好的,所以这两个 cmets 都说了不同的话,一个说离开“哪里”,另一个说不要。我已经尝试了这两种方法,并更改为“DELETE FROM [children] where [ChildID] =”给我一个语法错误“'='附近的语法不正确。”

标签: c# sql asp.net gridview


【解决方案1】:

您无需编码且仅使用设计器即可实现删除功能。因此,为您的GridView 添加一个SqlDataSource 并在其配置窗口中单击Advance,然后选中Generate INSERT、UPDATE 和DELETE statements 复选框。就这些。稍后,您可以修改生成的代码。

【讨论】:

  • 这会让表格条目旁边的删除按钮起作用吗?
  • @ACostea 是的,试试看。
  • 天啊.. 真的那么简单吗?当手动输入代码就像添加数据源一样简单时,为什么还要如此强调?我错过了什么吗?
  • 我的意思是,它可以满足我的规范要求。删除链接将该用户从数据库表中完全删除,甚至刷新网页上的网格视图以显示该用户已消失!
  • @ACostea,有很多方法可以做同样的事情。这是一个。
【解决方案2】:

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

【讨论】:

  • 真的吗?唯一的区别是我没有在粘贴的代码中包含屏幕截图中注释掉的代码。无论哪种方式,我将删除命令更改为 ("DELETE FROM [children] where [childID]=", connect) 并且我收到一个新的语法错误:“'=' 附近的语法不正确。”
  • "从 [children] 中删除 [childID]='5'"
  • 为什么是'5'?很抱歉问这个问题,但我只是想了解我在做什么,而不仅仅是粘贴代码。
  • 另外,通过添加“5”,当我点击删除时,gridview 从网页中消失,但表格仍在数据库中,包括我点击删除的条目
  • 这只是一个例子。你想删除哪一行你可以写它的id而不是5。抱歉解释少了。
【解决方案3】:

当你使用 delete 时,你不能使用列名。这是错误的。正确的格式是:从“tablename”中删除 ....

【讨论】:

  • 好吧,有些人这么说,我已经更新了我的代码以显示它现在的样子,但我仍然收到一个错误:“'=' 附近的语法不正确。”按下删除链接时。
【解决方案4】:

清除之前的书签

 string ChildID=GridView1.DataKeys[e.RowIndex].Value.ToString();

和更新请求

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

【讨论】:

    猜你喜欢
    • 2021-05-15
    • 1970-01-01
    • 2016-01-30
    • 2017-09-10
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多