0

asp.netWebアプリケーションで詳細ビューを使用しています。

更新され挿入されたイベントが発生するときは、同じように処理したいと思います。それらが持つイベント引数は共通の継承を持たない2つの別個のクラスであるため、基本的に同じコードを持つ2つの別個のメソッドが必要です。

これを回避する方法はありますか?

例えば。

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

(e == null)が返す場合に抽出したい;

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

可能であれば、ある種の一般的な方法に。

4

2 に答える 2

1

これらのクラスがEventArgsから直接継承するのは残念です。共通のプロパティだけでなく、ほとんどの場合、挿入にDetailsViewを使用し、更新にも使用するという事実から、EventArgsの同じサブラスから継承することは論理的に思われます。

そうは言っても、あなたがやりたいことは、少し動的な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 に答える