2009-04-23 12 views
1

Ich bin neu in MVC und Business Objects, aber ich habe Schwierigkeiten zu verstehen, wie eine Aktualisierung in einem Formular ausgelöst wird, wenn ein Update in meiner Geschäftslogik auftritt.VB.net Raising Events ... Verwirrung! MVC

Dies ist kein Problem für 95% meiner Formulare, da sie das Update von dem Formular aufrufen, das aktualisiert werden muss.

In einigen Fällen jedoch eine innere Form und Aktualisierung, die eine äußere Form benötigt, um dies zu reflektieren. Ich habe über Handles, Delegates, AddressOf etc. usw. gelesen und ich ertrinke in Optionen.

Vereinfacht gesagt, ich brauche drei Dinge 1. Form2 (innere Form) info muss passieren, aktualisiert, so dass der Benutzer Speichern klickt 2. Speichern ruft meine Data Access Layer und aktualisiert die Datenbank 3. Form1 (Außen form) hat ein DataGrid, das benachrichtigt werden muss, damit es über ein Sub-LoadGrid aktualisiert werden kann

Es ist Stufe 3, die ich nicht tun kann. Wie trigger ich ein Sub in Form2 (LoadGrid), um die Aktualisierung von einer externen Klasse durchzuführen. Wenn ich das nur zur Arbeit bringen kann, bin ich sicher, dass ich daraus für andere Szenarien lernen werde.

Antwort

1

Ich bin nicht 100% sicher über die MVC-Art, dies zu tun, aber ich habe etwas Ähnliches erreicht.

In meinem Business Layer Klasse

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 

Jetzt in Ihrem Code hinter der Form dieses Ereignis mit einem Sub behandeln können, die Ihre Datenraster erneut bindet.

Übrigens Blase ich das Ereignis zu einem Controller, auf dem die UI agiert eher als die Business-Schicht direkt.

hoffe, das hilft

EDIT:

Hallo Mitch

Die Parameter aus dem Ereignis an den Handler übergeben kann alles sein, obwohl Microsoft Convention Coding sagt, dass Sie das Objekt und die Ereignis args passieren sollte zurück.

Wenn Sie Ihre Veranstaltung wie diese

Public Event myEvent(dim updated as Boolean) 

erklären und dann die Griffe haben Unter der gleichen Signatur

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

Sie sollten dann in der Lage sein, der Wert aktualisiert haben (dies ist nur ein Beispiel)

Die einzige Sache, die Sie überprüfen sollten, ist, dass Sie Ihre Business Class wie mit Ereignissen

instanziieren
Dim WithEvents myBL as new BusinessLayer 

Wenn dies immer noch nicht funktioniert (wenn dies in WinForms eher asp.net) Sie müssen möglicherweise etwas sagen wie

AddHandler myBl.myEvent AddressOf handler 

Hope this

+1

Hallo Dean, vielen Dank hilft, ist dies die Art von Code, den ich gesucht habe. Eine Sache, über die ich nicht klar bin, ist der Teil "o as object, e as eventargs".Ich entfernte das, weil ich nicht sicher war, was o und e in dieser Situation darstellen sollten. Der Handles Sub wird jedoch nie aufgerufen und ich denke, dass es damit zu tun hat, dass ich das "o as object, e as eventargs" entferne. Wenn das richtig ist, was gebe ich als Objekt und EventArgs? Entschuldigung, wenn das eine dumme Frage ist, aber vielen Dank für Ihre Hilfe bisher. – Mitch

+0

Siehe oben für weitere Informationen – Dean

+0

Ich fühle, wir sind fast da, aber immer noch keine Freude. Ich habe sichergestellt, dass ich "ByVal Updated As Boolean" verwendet und meine Business Class geändert, um WithEvents zu enthalten, aber die Handles Sub reagiert immer noch nicht. Das RaiseEvent wird definitiv genannt, aber hier wird die Spur kalt. Meine Business-Schicht wird als Private Shared WithEvents _ClientDAL als neue ClientDAL() deklariert. – Mitch