2010-07-12 63 views
0

我在我的asp.net web应用程序中使用详细信息视图。DetailsView事件事件(更新删除)与相同的处理程序

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

有没有办法解决这个问题?

例如。

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

如果可能,进入某种常用方法。

回答

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

} 
+0

这真是太棒了这就是我想要的......问题是我们在.net 3.5 :(哦,非常感谢那个亚光 – 2010-07-13 06:33:46

0

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

+0

这听起来像它会工作,但我想尝试不打领带自己不必调用按钮某些名字,因为这是一个框架的一部分这将被许多其他开发人员使用,我知道及时调用按钮某些名称的原因将会丢失。 – 2010-07-13 00:27:00

+0

然后给他们打电话,然后在代码中处理 – TheGeekYouNeed 2010-07-13 00:36:25