我在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;
}
如果可能,采用某种常用方法。
答案 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。此事件将为您处理这两种情况。