我需要将控件的不同方法与完全相同的代码相关联。 我现在这样做了:
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();
}
感觉不对。我怎样才能避免重复?
答案 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个事件处理程序稍微好一点,但如果您经常这样做,那么它可能是值得的