OnItemInstered,OnItemUpdated背后的代码相同

时间:2011-07-04 23:39:53

标签: c# asp.net

我需要将控件的不同方法与完全相同的代码相关联。 我现在这样做了:

protected void dgvProperty_ItemInserted(object sender, GridInsertedEventArgs e)
{
    BindItems();
}

protected void dgvProperty_ItemDeleted(object sender, GridDeletedEventArgs e)
{
    Binditems();
}

protected void dgvProperty_ItemUpdated(object sender, GridUpdatedEventArgs e)
{
    BindItems();
}

感觉不对。我怎样才能避免重复?

2 个答案:

答案 0 :(得分:1)

不幸的是,因为每个事件的参数都不同。如果GridXXXEventArgs都继承自同一个类(即GridEventArgs),那么你可以做得更整洁但我怀疑这是这种情况。

通过使用从每个事件调用的单个方法,您正在做正确的事情。

答案 1 :(得分:1)

我认为上面显示的代码没有“错误”,但可以合并这个逻辑

如果dgv对象是您控制的类,则可以让它引发在插入,删除或更新项时引发的另一个事件。然后你可以简单地听这个事件。或者,您可以继承dgv对象以添加上面显示的行为。

编辑:这是一个例子。我在你的样本中对事件args做了一个快速谷歌,我猜你正在使用Telerik RadGrid,所以我将以此为基础,尽管主体是通用的。

public class ExampleGrid : RadGrid
{
      public ExampleGrid() : base()
      {
           base.ItemInserted += (o, e) => NotifySomethingChanged();
           base.ItemDeleted += (o,e) => NotifySomethingChanged();
           base.ItemUpdated += (o,e) => NotifySomethingChanged();
      }

      public event EventHandler SomethingChanged;

      private void NotifySomethingChanged()
      {
             var handler = this.SomethingChanged;
             if (handler != null)
                  handler(this, EventArgs.Empty);
      }
  }

现在您可以收听SomethingChanged事件了。这只比在您的控件中附加3个事件处理程序稍微好一点,但如果您经常这样做,那么它可能是值得的