2009-04-23 3 views
1

Je suis nouveau sur MVC et Business Objects mais j'ai du mal à comprendre comment déclencher une actualisation sur un formulaire lorsqu'une mise à jour se produit dans ma logique métier.VB.net Raising Events ... confusion! MVC

Ce n'est pas un problème pour 95% de mes formulaires, car ils appellent la mise à jour à partir du formulaire qui doit être mis à jour.

Cependant, dans certains cas, une forme interne fait et mise à jour qui nécessite une forme extérieure pour refléter cela. J'ai lu à propos de Handles, Delegates, AddressOf etc etc et je me noie dans les options.

En termes simples, il me faut trois choses pour arriver 1. Form2 (forme intérieure) a mis à jour les informations, afin que l'utilisateur clique sur Enregistrer 2. Enregistrer appelle mon accès aux données couche et met à jour la base de données 3. Form1 (externe form) a un DataGrid qui doit être notifié pour qu'il puisse être mis à jour via un LoadGrid secondaire

C'est l'étape 3 que je ne peux pas faire. Comment puis-je déclencher un Sub dans Form2 (LoadGrid) pour effectuer l'actualisation à partir d'une classe externe. Si je peux juste faire fonctionner cela, je suis sûr que je vais apprendre de cela pour d'autres scénarios.

Répondre

1

Je ne suis pas sûr à 100% de la façon MVC de le faire, mais j'ai réussi quelque chose de similaire.

Dans ma couche Business Class

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 

maintenant votre code derrière le formulaire, vous pouvez gérer cet événement avec un Sub qui lie de nouveau votre grille de données. Incidemment, je bulle l'événement à un contrôleur sur lequel l'interface utilisateur agit sur plutôt que la couche de gestion directement.

Hope this helps

EDIT:

Salut Mitch

Les paramètres passés de l'événement au gestionnaire peut être quelque chose bien que la convention Microsoft codage dit que vous devez passer l'objet et l'événement args arrière.

Si vous déclarez votre événement comme celui-ci

Public Event myEvent(dim updated as Boolean) 

et ont les poignées sous ont la même signature

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

vous devriez alors être en mesure de la valeur de mise à jour (seulement un exemple La seule chose que vous pourriez vouloir vérifier est que vous instanciez votre classe affaires comme avec les événements

Dim WithEvents myBL as new BusinessLayer 

Si cela ne fonctionne toujours pas (si cela en WinForms plutôt asp.net), vous devrez peut-être dire quelque chose comme

AddHandler myBl.myEvent AddressOf handler 

Hope this helps

+1

Salut Dean, merci beaucoup, cela est le genre de code que je cherchais. Une chose dont je ne suis pas sûr cependant, la partie "o comme objet, e comme EventArgs".J'ai enlevé ceci car je n'étais pas sûr de ce que o et e étaient censés représenter dans cette situation. Cependant, le Handles Sub n'est jamais appelé et je pense que c'est pour faire avec moi en supprimant le "o comme objet, e comme eventargs". Si cela est correct, que puis-je transmettre en tant qu'objet et EventArgs? Toutes mes excuses si c'est une question stupide, mais merci beaucoup pour votre aide jusqu'à présent. – Mitch

+0

Voir ci-dessus pour plus d'informations – Dean

+0

Je pense que nous sommes presque là mais toujours pas de joie. Je me suis assuré que j'utilise "ByVal Updated As Boolean" et modifié ma classe Business pour inclure WithEvents mais le Handles Sub ne répond toujours pas. Le RaiseEvent est définitivement appelé, mais c'est là que le sentier devient froid. Ma couche de gestion est déclarée en tant que Private Shared WithEvents _ClientDAL en tant que nouvelle ClientDAL(). – Mitch