DetailsView项目事件(已更新已删除)具有相同的处理程序

时间:2010-07-12 23:56:09

标签: asp.net events detailsview

我在asp.net网络应用程序中使用详细信息视图。

当它触发更新和插入的事件时,我想以同样的方式处理它们。因为事件args是两个独立的类,没有公共继承,所以我必须有两个单独的方法,基本相同的代码。

有什么方法吗?

例如

protected void DetailsViewItemInserted(object sender, DetailsViewInsertedEventArgs e)
    {
        if (e == null)
            return;

        if (e.Exception != null)
        {
            e.ExceptionHandled = HandleException(e.Exception);
            e.KeepInInsertMode = e.ExceptionHandled;
        }
    }

    protected void DetailsViewItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
    {
        if (e == null)
            return;

        if (e.Exception != null)
        {
            e.ExceptionHandled = HandleException(e.Exception);
            e.KeepInEditMode = e.ExceptionHandled;
        }
    }

我想提取             if(e == null)                 返回;

        if (e.Exception != null)
        {
            e.ExceptionHandled = HandleException(e.Exception);
            e.KeepInEditMode = e.ExceptionHandled;
        }
如果可能,

采用某种常用方法。

2 个答案:

答案 0 :(得分:1)

我同意这些类直接从EventArgs继承是令人失望的。似乎合乎逻辑的是,他们将从EventArgs的相同子类继承而不仅仅是它们的公共属性,而且大多数时候使用DetailsView进行插入的事实也会使用它来进行更新。

话虽这么说,你想做的事情可以用一点动态C#来完成。它非常酷,甚至可能有点优雅,虽然有点开销。

试试这个:(需要C#4.0)

protected void DetailsView1_Inserted(Object sender, DetailsViewInsertedEventArgs e)
{
    ProcessDetailsViewEventArgs(e);
}

protected void DetailsView1_Updated(Object sender, DetailsViewUpdatedEventArgs e)
{
    ProcessDetailsViewEventArgs(e);
}

private void ProcessDetailsViewEventArgs(dynamic e)
{
    if (e == null)
        return;

    if (e.Exception != null)
    {
        e.ExceptionHandled = HandleException(e.Exception);
        e.KeepInEditMode = e.ExceptionHandled;
    }

}

答案 1 :(得分:0)

使用OnItemCommand,&给你的编辑&删除按钮CommandNames。此事件将为您处理这两种情况。