C# 在我的记忆中,我更新了同样的代码

C# 在我的记忆中,我更新了同样的代码,c#,asp.net,C#,Asp.net,我需要将不同的控制方法和完全相同的代码关联起来。 我现在是这样做的: protected void dgvProperty_ItemInserted(object sender, GridInsertedEventArgs e) { BindItems(); } protected void dgvProperty_ItemDeleted(object sender, GridDeletedEventArgs e) { Binditems(); } protected voi

我需要将不同的控制方法和完全相同的代码关联起来。 我现在是这样做的:

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

感觉不对。如何避免重复?

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


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

我不认为您上面显示的代码有任何“错误”,但可以整合此逻辑

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

编辑:这里有一个例子。我在你的示例中快速搜索了事件参数,我猜你使用的是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个事件处理程序稍微好一点,但是如果您经常这样做,这是值得的

如果可能的话,您能给我一个简单的例子吗?