2011-12-29 101 views
1

如何通知我使用委托进行的更改的外部“源”。C#委托通知更改

基本上我有一个表格,我填写该表单并单击一个按钮,将我填充的数据保存到XML表格中作为XML。我希望能够通知使用另一个“实体”可以调用的委托对表单进行的更改。

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

我没有任何访问权限。我只是想通知我已经改变了喜好,并且应该根据这些改变显示网格。 – 2011-12-29 11:55:46

+0

他们不在同一页面上。他们在不同的程序集上。我只能设置首选项(应显示哪些列,页面的行数等) – 2011-12-29 11:58:49

+0

然后我没有得到一些东西:您正在使用ASP.NET。如果网格不在同一页面上,但是您保存了数据,则网格会在下次有人重新加载时显示更新的信息。或者你想告诉其他用户的浏览器已加载的网格重新加载新的数据?如果后者是你想要的,解决方案是比C#更多的JavaScript。看看[SignalR](https://github.com/SignalR/SignalR)。 – 2011-12-29 12:01:50