2011-06-07 37 views
0

我有麻烦缠绕我的头周围.NET DataTable事件,处理,动作等寻找.NET DataTable的事件的解释和处理

我试图从MSDN库理解,但我发现我还没有理解它是如何一起工作的。我也一直无法找到任何其他来源(通过谷歌搜索),解释它的来龙去脉。

例如,我想明白,有DataTable事件(如ColumnChangedRowChanged等),但也有DataRowColumnChangeEventArgsDataColumnChangeEventArgs,等他们如何关联/协同工作?

谁能提供提供DataTable事件和处理彻底解释的链接? (或者如果你有这样的时间自己提供一个大声笑!)(特别希望在C++的例子,但如果在另一种语言,我现在可以做)

非常感谢!

回答

1

它看起来像你得到了事件本身,并且获得通过自己的实际事件处理程序EventArgs的参数之间的混淆。

当您注册来处理事件,有一对夫妇,你必须知道的事情。我将以你的ColumnChanged事件为例。

第一个是你在登记事件是ColumnChanged事件(似乎直线前进,但我把它出于清楚的缘故)。

第二个是为事件注册,您需要一个事件处理程序。该事件处理程序必须匹配该事件提供的委托签名。对于ColumnChanged,委托必须有两个参数:1)一个名为sender的对象,以及2)用于传递事件特定参数DataColumnChangedEventArgs的对象。你的方法应该是这个样子:

public void ColumnChangedHandler(object sender, DataColumnChangedEventArgs e) 
{ 
    // Do some work here when the event is fired 
} 

之后你有,最后一步实际上是注册您的处理程序来处理事件:

someDataTable.ColumnChanged += 
    new DataColumnChangeEventHandler(ColumnChangedHandler); 

现在,如果你看看你的周围可能会注意到有些人使用快捷语法只需一个步骤来创建一个处理程序:

someDataTable.ColumnChanged += (object sender, DataColumnChangedEventArgs e) 
    { 
     // Do some work here when the event is fired 
    } 

这将允许您创建一个匿名方法来处理事件,但是当我可能会导致问题t来清理对象并取消注册任何处理程序。

+0

我同意贾斯汀。它看起来好像你在混淆事件(例如:RowChanged)和传递给这些事件的参数(例如:DataRowChangedEventArgs)。一个是事件,另一个是传递给事件的参数。 – Rod 2011-06-07 16:59:35

+0

@Rod:是的,我需要更多的文章解释他们在事件处理中的“角色”。我意识到他们是不同的,但我是新来的事件处理,我真的想了解它的来龙去脉。 – developer 2011-06-07 17:01:12

+0

更长的答案有助于更多(我在之前评论过你的初稿时)。谢谢:)我仍然需要更多的描述;知道任何可能会进一步深入的伟大链接? – developer 2011-06-07 18:45:11