2009-04-23 10 views
1

私はMVCとビジネスオブジェクトを使い慣れていませんが、ビジネスロジックで更新が発生したときにフォームのリフレッシュをトリガーする方法を理解するのは難しいです。VB.netイベントの発生...混乱! MVC

これは、更新が必要なフォームから更新プログラムを呼び出すため、私のフォームの95%では問題ありません。

しかし、場合によっては、これを反映するために外部フォームが必要な内部フォームが更新されます。私はHandles、Delegates、AddressOfなどについて読んできました。私はオプションで溺れています。ユーザーが[保存]をクリックするように、簡単に言えば

、私は、情報を更新しました 1のForm2(内部形式)を発生する3つのことを必要とする 2.保存するには、私のデータアクセス層を呼び出して、データベースに 3. Form1の(外側を更新しますフォーム)に通知する必要があるDataGridがあり、Sub LoadGrid経由で更新できるようにします。

私はできません。 Form2(LoadGrid)でSubをトリガーして、外部クラスからリフレッシュを実行するにはどうすればよいですか。私はこれを働かせることができれば、私は他のシナリオのためにこれから学ぶと確信しています。

答えて

1

私はこれを行うMVCの方法を100%確信していませんが、私は似たようなことを達成しました。あなたのデータグリッドを再バインド小でこのイベントを処理することができますフォームの背後にあるコードの中で今

私のビジネスレイヤクラスで

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が直接動作するコントローラーにイベントをバブルします。

希望これは

EDIT役立ちます:

こんにちはミッチ

マイクロソフトコーディング規約は、あなたがオブジェクトとイベント引数を渡す必要があることを述べているが、ハンドラにイベントから渡されたパラメータは、何もすることができますがバック。

あなたはこの

Public Event myEvent(dim updated as Boolean) 

ようなあなたのイベントを宣言してから、ハンドルサブが同じシグネチャ

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

を持っていますが、更新の値ができるはず場合(これは一例に過ぎません)

あなたがチェックしたいことは、イベントのようにビジネスクラスをインスタンス化することだけです。

Dim WithEvents myBL as new BusinessLayer 

これはまだ動作しない場合は(このasp.netむしろWinFormsのであれば)あなたが

AddHandler myBl.myEvent AddressOf handler 

希望これは

+1

こんにちはディーンに役立つような何かを言う必要があり、多くのおかげで、これは私が探していたコードの種類。しかし、私は明確ではない1つのことは、 "オブジェクトとして、e EventArgsとして"部分。私はこれを取り除きました。なぜなら、この状況ではoとeが何を表しているのか分からなかったからです。しかし、Handles Subは決して呼び出されません。私はそれを "オブジェクトとしてのoをeventargsとして"取り除くことと関係していると思います。これが正しい場合は、オブジェクトとEventArgsとして何を渡しますか?これは愚かな質問であるが、あなたの助けを今までに多くのありがとうとお詫び申し上げます。 – Mitch

+0

詳細については上記を参照 – Dean

+0

私はほとんどそこにいると感じますが、まだ喜びはありません。私は "ByVal Updated As Boolean"を使用していることを確認し、ビジネスクラスを変更してWithEventsをインクルードしましたが、Handles Subはまだ応答していません。 RaiseEventは間違いなく呼び出されていますが、それはトレイルが寒くなる場所です。私のビジネスレイヤーは、新しいClientDAL()としてPrivate Shared WithEvents _ClientDALとして宣言されています。 – Mitch