You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GridView与ObjectDataSource配合时RowDeleted事件未触发的问题

分析GridView RowDeleted事件未触发的原因及修复方案

让我们一步步排查问题:

1. 最直接的原因:GridView未绑定RowDeleted事件处理程序

看你的GridView标记代码,缺少OnRowDeleted属性,这意味着ASP.NET不知道要调用你后台写的GridView1_RowDeleted方法。服务器控件的事件必须在标记中显式绑定,或者在后台代码中手动注册。

修复方法:

修改GridView的标记,添加OnRowDeleted属性:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1" OnRowDeleted="GridView1_RowDeleted">

2. 次要问题:DeleteMethod未返回受影响行数(影响AffectedRows的正确性)

即使事件触发了,你的DeleteEmployee方法返回void,ObjectDataSource无法获取数据库操作影响的行数,导致e.AffectedRows的值会是-1(默认值),这样你的判断条件if(e.AffectedRows > 0)永远不会成立,提示信息也不会显示。

修复方法:

修改EmployeeDataAccess中的DeleteEmployee方法,让它返回int类型的受影响行数:

public static int DeleteEmployee(int Original_ID, string Original_Name, string Original_Education) {
    string cs = ConfigurationManager.ConnectionStrings["Sample"].ConnectionString;
    using (SqlConnection con = new SqlConnection(cs)) {
        con.Open();
        SqlCommand cmd = new SqlCommand() {
            CommandText = "delete from Employee where ID = @Original_ID and Name = @Original_Name and EducationID = (select EduID from Education where EducationType = @Original_Education)",
            Connection = con
        };
        SqlParameter OginalID = new SqlParameter("@Original_ID", Original_ID);
        cmd.Parameters.Add(OginalID);
        SqlParameter OginalName = new SqlParameter("@Original_Name", Original_Name);
        cmd.Parameters.Add(OginalName);
        SqlParameter OginalEducation = new SqlParameter("@Original_Education", Original_Education);
        cmd.Parameters.Add(OginalEducation);
        // 返回ExecuteNonQuery的结果(受影响的行数)
        return cmd.ExecuteNonQuery();
    }
}

额外检查点

如果做完上面两步事件还是没触发,检查页面的AutoEventWireup属性是否为true(默认是true):

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="YourPage.aspx.cs" Inherits="YourNamespace.YourPage" %>

如果AutoEventWireup是false,你需要在后台的Page_Load方法中手动绑定事件:

protected void Page_Load(object sender, EventArgs e) {
    if (!IsPostBack) {
        GridView1.RowDeleted += GridView1_RowDeleted;
    }
}

按照上面的步骤修改后,RowDeleted事件应该能正常触发,并且正确显示删除提示。

内容的提问来源于stack exchange,提问作者Mina shaker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 00:07:34