2010-04-12 70 views
2

我想通過使用我在網上找到的代碼(link)來擴展GridView類,以始終顯示頁眉和頁腳,即使數據源爲空時也是如此。但是,代碼是用C#編寫的,但我使用VB。VB等效的C#事件創建

什麼是以下的VB等價物?

public event MustAddARowHandler MustAddARow; 

有沒有辦法解決VB.NET不允許事件返回類型?

此外,我不能轉換下面的函數,因爲下面的錯誤。

代碼:

Protected Function OnMustAddARow(ByVal data As IEnumerable) As IEnumerable 
    If MustAddARow = Nothing Then 'Error on MustAddARow' 
     Throw New NullReferenceException("The datasource has no rows. You " _ 
             & "must handle the 'MustAddARow' Event.") 
    End If 
    Return MustAddARow(data) 'Error on MustAddARow' 
End Function 

錯誤:公共事件MustAddARow(數據截至System.Collections.IEnumerable)」是一個事件,而不能直接調用。使用'RaiseEvent'語句來引發一個事件。

回答

0

如我在其他的答案描述發佈(link),我將C#代碼編譯成一個DLL文件w這是我在我的VB代碼中使用的。

2

像這樣:

Public Event MustAddRow(data As IEnumerable) 
+0

原始行中的「MustAddARowHandler」如何? – Steven 2010-04-12 19:49:20

+0

VB.Net編譯器將自動生成委託類型。 – SLaks 2010-04-12 19:50:07

+1

SLaks是正確的,但有另一種方法:公共事件MustAddRow MustAddRowHandler – 2010-04-12 19:54:24

2

注:這個答案其實是不對的。我的錯。顯示的語法是正確的(這就是爲什麼我不會立即刪除這個答案),但它不會編譯,因爲事件 - 通常是多播代理 - 不允許在VB中返回一個值。淨。


事件聲明:

Public Event MustAddRow As MustAddRowHandler 

委託類型聲明:(這是上述的先決條件)

Public Delegate Function MustAddRowHandler(ByVal data As IEnumerable) As IEnumerable 
+0

錯誤:無法使用委託類型聲明事件具有返回類型。 – Steven 2010-04-12 20:05:46

+0

什麼是組播代表,它們與單播代表有什麼不同?在VB中,所有委託都有一個調用列表,即 - 它們都可以調用多個目標方法。 – 2010-04-12 20:12:10

+0

@ M.A。 Hanin:AFAIK,代表是默認組播的。我甚至不確定是否可以定義單播委託,因爲實現委託的.NET類以特殊方式受到保護。我無法給出明確的答案,但我懷疑VB.NET只會接受'Sub'委託,即那些不返回任何值。 - 另見我的評論在另一個答案。 – stakx 2010-04-12 20:20:27