2009-04-23 54 views
1

我是新來的MVC和業務對象,但我很努力瞭解如何在業務邏輯中發生更新時觸發表單上的刷新。VB.net提高事件......混亂! MVC

對於95%的表單,這不是問題,因爲他們從需要更新的表單調用更新。

但是,在某些情況下,內部表單需要更新,需要使用外部表單來反映這一點。我讀過關於Handles,Delegates,AddressOf等的內容,我正在淹沒選項。

簡單來說,我需要三件事情發生 1.窗體2(內部形式)已更新的信息,所以用戶點擊保存 2.保存叫我的數據訪問層和更新數據庫 3 Form1中(外窗體)有一個DataGrid需要通知,以便它可以通過一個Sub LoadGrid進行更新。

這是階段3我不能這樣做。如何在Form2(LoadGrid)中觸發一個Sub來從外部類進行刷新。如果我可以讓這個工作,我相信我會從其他場景中學到這一點。

回答

1

我不是100%確定在MVC這樣做的方式,但我已經實現了類似的東西。

在我的業務層類

Class BL 
public event doneUpdate(o as object, e as eventArgs) 

sub method doDBUpdate() 

'do your stuff 

RaiseEvent doneUpdate(o,e) 
end sub 

End Class 

Class Form 
dim withEvents bl as BL 

sub g handles bl.doneUpdate(o as object , e as eventargs) 
    'rebind 
end sub 

End Class 

現在,在後面的代碼的形式,你可以處理與重新綁定您的數據網格中的子此事件。

順便提一下,我將事件冒泡到UI所作用的控制器上,而不是直接作用於業務層。

希望這有助於

編輯:

米奇嗨

的從事件處理函數傳遞的參數可以是任何東西,儘管微軟編程約定說,你應該通過對象和事件參數背部。

如果你宣佈你的活動這樣

Public Event myEvent(dim updated as Boolean) 

,然後讓手柄子具有相同的簽名

Public Sub handler(byval updated as Boolean) handles myClass.myEvent 

,那麼你應該能夠更新的值(這只是一個例子)

您可能想要檢查的唯一的事情是,您正在事件實例化您的業務類別

Dim WithEvents myBL as new BusinessLayer 

如果這仍然無法工作(如果在的WinForms,而asp.net),你可能需要這樣說

AddHandler myBl.myEvent AddressOf handler 

希望這有助於

+1

喜院長,非常感謝,這是我正在尋找的那種代碼。有一點我不清楚,即「o As Object,e As EventArgs」部分。我刪除了這個,因爲我不確定在這種情況下o和e應該代表什麼。然而,Handles Sub從來不會被調用,我認爲這是爲了去除「o作爲對象,e作爲eventargs」。如果這是正確的,我作爲對象和EventArgs傳遞了什麼?道歉,如果這是一個愚蠢的問題,但非常感謝您的幫助到目前爲止。 – Mitch 2009-04-23 12:35:37