2011-12-29 7 views
1

デリゲートを使用して行った変更を外部の「ソース」にどのように通知できますか?変更を通知するC#代理人

基本的に私はフォームを持っています。私はそのフォームに記入して、 私の埋め込まれたデータをXMLとしてDBテーブルに保存するボタンをクリックします。フォームの変更は、別の「エンティティ」が呼び出せる代理人を使って行われたことを通知できるようにしたい。

public void Changes_Made() 
{ 
    //yay. Changes made. 
} 

protected void okButton_Click(object sender, EventArgs e) 
{ 
    //... 
    //save data 
    //... 
    Changes_Made(); 
} 

実用的なシナリオは次のとおりです。私は私の好みを保存すると、私のデータを示し、グリッドは、私がok_buttonをクリックすると、設定された優先順位をリフレッシュして使用します。これは意味をなさないでしょうか?

答えて

1

変更を通知するイベントを発生させることができます。

public ctor() // Method where you want to hook the event, can be constructor or any thing else 
{ 
    //Hook to event 
    obj.ChangesMade += Changes_Made; 
    // Here obj is the object of type in which you have okButton_Click 
    // and ChangesMade event declaration 

} 
public void Changes_Made() 
{ 
    //yay. Changes made. update grid 
} 


//declare event 
public event EventHandler ChangesMade(); 
protected void okButton_Click(object sender, EventArgs e) 
{ 
    //... 
    //save data 
    //... 

    //raise event 
    if(ChangesMade != null) 
     ChangesMade(this, new EventArgs()); 
} 
0

私が正しく理解していれば、グリッドと保存ボタンは同じページにあります。そのような場合は、変更内容を保存した直後にPopulateGridData();などと呼んでください。

+0

私はグリッドにアクセスできません。私はただ好みを変更したことを通知したいし、グリッドはそれらの変更に従って表示する必要があります。 –

+0

同じページにはありません。彼らは別のアセンブリにあります。私は設定のみを設定することができます(どの列を表示する必要があります、行のPEのページなど) –

+0

私は何かを取得しない:あなたはASP.NETを使用しています。グリッドが同じページにないのにデータを保存した場合、次回グリッドが更新された情報がグリッドに表示されます。または、すでにロードされているグリッドに他のユーザーのブラウザに新しいデータをリロードするよう指示したいとしますか?後で希望のものがあれば、その解決策はC#よりもjavascriptです。 [SignalR](https://github.com/SignalR/SignalR)を確認してください。 –