GridView '触发了未处理的事件RowDeleting,但有一个事件

本文关键字:事件 RowDeleting 有一个 未处理 GridView | 更新日期: 2023-09-27 18:07:43

我一直在尝试使用webusercontrol、delegate和ADO创建动态控制面板。甚至我们已经编写了删除和编辑的委托,但面临"GridView 'GridView1'触发事件RowDeleting未处理"的问题。有人能帮帮我吗这是我的代码

    protected void Page_Load(object sender, EventArgs e)
    {
        GridView1.DataSource = this.DataSource;
        GridView1.DataBind();
        GridView1.DataKeyNames = new string[] { this.DataKeyNames };
    }
    public object DataSource { get; set; }
    public string DataKeyNames { get; set; }
    public event GridHander RowDeleting;
    public event GridHander RowSawing;

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        GridViewRow gvr = ((LinkButton)e.CommandSource).Parent.Parent as GridViewRow;
        int rowIndex = gvr.RowIndex;
        object id = GridView1.DataKeys[rowIndex].Value;
        switch (e.CommandName)
        {
            case "Edit":
                GridView1.EditIndex = rowIndex;
                break;
            case "Delete":
                if (RowDeleting != null)
                {
                    GridEventArgs args = new GridEventArgs() 
                    {
                         row=gvr,
                         id=id,
                         rowIndex=rowIndex
                    };
                    RowDeleting.Invoke(e.CommandSource, args);
                }
                break;
            case"Save":
                if (RowSawing != null)
                {
                    GridEventArgs args = new GridEventArgs() 
                    {
                        row = gvr,
                        id = id,
                        rowIndex = rowIndex
                    };
                    RowSawing.Invoke(e.CommandSource, args);
                }
                GridView1.EditIndex = -1;
                break;
            case "Cancel":
                GridView1.EditIndex = -1;
                break;
            default:
                break;
        }
    }
}
我的webform

//

ublic partial class CategoryControlPanel : System.Web.UI.Page
{
    CategoryResposite _categoryResposite=new CategoryResposite();
    protected void Page_Load(object sender, EventArgs e)
    { 
        ControlPanel.DataSource = _categoryResposite.ListCategories();
        ControlPanel.RowDeleting += ControlPanel_RowDeleting;
        ControlPanel.RowSawing += ControlPanel_RowSawing;
    }
    void ControlPanel_RowSawing(object sender, GridEventArgs e)
    {
        throw new NotImplementedException();
    }
    void ControlPanel_RowDeleting(object sender, GridEventArgs e)
    {
        _categoryResposite.DeleteCategories(Convert.ToInt32(e.id));   
    }

GridView '触发了未处理的事件RowDeleting,但有一个事件

您正在尝试使用命令名称Delete作为删除按钮。所以gridview会自动创建一个行删除事件....

您需要将命令参数从Delete更改为其他内容,如Delete_Product或任何您想要的…

您发布的代码不完整(缺少aspx文件代码),从您对问题的描述中,听起来好像您没有将RowDeleting事件分配给GridView1。

在aspx文件的gridview标签中添加如下赋值:

<asp:gridview ID="..." runat="server" ... OnRowDeleting="<name of event handler>" ...>

如果事件处理程序ControlPanel_RowDeleting被设计用来处理从gridview中删除的操作,那么插入这个作为事件处理程序名称。确保删除后重新绑定gridview,以便在回发时显示更改。

protected void ControlPanel_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    // cancel the automatic delete action
    e.Cancel = true;
    // do the delete
    _categoryResposite.DeleteCategories(Convert.ToInt32(e.id));
    // complete delete action
    GridView1.DataBind();
}

GridView的优点之一是它提供了一个内置的CommandField按钮,允许我们执行某些操作,如编辑,更新,删除和选择GridView数据。

要添加GridView中提到的那些命令字段,您可以遵循以下几个步骤:1. 切换到设计视图2. 右键单击GridView并选择->显示智能标签->添加新列3.在列表中选择CommandField4. 检查删除和编辑/更新选项,然后确定

如您所见,编辑和删除命令字段被自动添加到GridView的最后一列。现在我们可以开始编写代码来编辑和更新GridView中的信息。

为了在GridView中执行编辑和更新,我们需要使用三个事件(GridView_RowEditing, GridView_RowCancelingEdit, GridView_RowUpdating)。对于那些不知道如何在GridView中生成事件的人,您可以遵循以下步骤:

  1. 切换到Visual Studio Designer中的设计视图
  2. 点击GridView
  3. 导航到GridView属性窗格,然后切换到事件属性
  4. 从那里你可以找到事件列表,包括上面提到的三个事件
  5. 双击它生成事件处理程序

尝试在方法签名中添加protected