События элемента DetailsView (обновлено удалено) с тем же обработчиком - PullRequest
0 голосов
/ 13 июля 2010

Я использую подробное представление в своем веб-приложении asp.net.

Когда он запускает свои обновленные и вставленные события, я бы хотел обрабатывать их так же. Поскольку они имеют два отдельных класса без общего наследования, у меня должно быть два отдельных метода с одним и тем же кодом.

Есть ли способ обойти это?

например.

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.Exception != null)
        {
            e.ExceptionHandled = HandleException(e.Exception);
            e.KeepInEditMode = e.ExceptionHandled;
        }

в какой-то общий метод, если это возможно.

Ответы [ 2 ]

1 голос
/ 13 июля 2010

Я согласен, что разочаровывает то, что эти классы наследуются непосредственно от 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;
    }

}
0 голосов
/ 13 июля 2010

Используйте OnItemCommand и дайте вашим кнопкам Edit & Delete CommandNames.Это событие будет обрабатывать оба сценария для вас.

...