【问题标题】:The GridView 'GridView1' fired event RowDeleting which wasn't handled , but there is an eventGridView 'GridView1' 触发了未处理的事件 RowDeleting,但有一个事件
【发布时间】:2013-04-06 21:53:04
【问题描述】:

我一直在尝试使用 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;
        }
    }
}

//我的网络表单

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));   
    }

【问题讨论】:

  • 您在代码中的哪个位置设置GridView1.RowDeleting 的事件处理程序?我没看到。我看到你为ControlPanel.RowDeleting 设置了一个处理程序,ControlPanel 是对GridView1 的引用吗?如果是这样,您确定参考是正确的吗?

标签: c# asp.net gridview webforms


【解决方案1】:

您发布的代码不完整(缺少 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();
}

【讨论】:

    【解决方案2】:

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

    您需要将命令参数从 Delete 更改为其他类似 Delete_Product 或任何您想要的...

    【讨论】:

      【解决方案3】:

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

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

      如您所见,Edit 和 Delete CommandField 自动添加到 GridView 的最后一列。现在我们可以开始编写代码来编辑和更新 GridView 中的信息了。

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

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

      【讨论】:

        【解决方案4】:

        尝试在方法签名中添加保护。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多