2011-06-07 35 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