【问题标题】:C# delegate to notify changesC#委托通知更改
【发布时间】:2011-12-29 11:50:20
【问题描述】:

如何将我使用委托所做的更改通知外部“来源”。

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

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

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

实际情况是:当我保存我的首选项时,显示我的数据的网格将在我单击 ok_button 时刷新并使用设置的首选项。这有意义吗?

【问题讨论】:

    标签: c# asp.net delegates


    【解决方案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());
    }
    

    【讨论】:

      【解决方案2】:

      这就是C# events 的用途。

      【讨论】:

        【解决方案3】:

        如果我理解正确,网格和保存按钮在同一页面上。如果是这种情况,只需在保存更改后直接拨打 PopulateGridData(); 或类似的电话。

        【讨论】:

        • 我无权访问网格。我只想通知我已经更改了首选项,并且应该根据这些更改显示网格。
        • 它们不在同一页面上。它们位于不同的组件上。我只能设置首选项(应该显示哪些列,每页的行数等)
        • 那么我没有得到任何东西:您使用的是 ASP.NET。如果网格不在同一页面上,但您保存了数据,则网格将在下次有人重新加载时显示更新的信息。或者您想告诉其他用户浏览器中已经加载的网格重新加载新数据?如果后者是您想要的,那么解决方案是比 C# 更多的 javascript。查看SignalR。
        猜你喜欢
        • 2013-07-02
        • 2019-09-20
        • 1970-01-01
        • 1970-01-01
        • 2017-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多