0

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

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

有没有办法解决?

例如。

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

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

如果可能的话,进入某种常见的方法。

4

2 回答 2

1

我同意这些类直接继承自 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;
    }

}
于 2010-07-13T04:06:20.197 回答
0

使用 OnItemCommand,并为您的编辑和删除按钮提供 CommandNames。此事件将为您处理这两种情况。

于 2010-07-13T00:13:17.703 回答