Есть юзер контрол (назовем его "парент"), на котором есть грид. В гриде в каждой строчке есть кнопка (назовем её "кнопка"). По нажатию этой "кнопки" рядом с ней появляется другой юзер контрол (назовем его "окно"). В "окне" есть куча полей и две кнопки Apply и Cancel. Необходимо как-то при нажатии на любую из этих кнопок (Apply or Cancel) организовать нотификацию "паренту" чтоб он мог обновить грид. Как это лучше сделать?
if ("upload" == e.CommandName)
{
// находим "окно" в строке грида
WindowControl wc = e.Item.FindControl("ucWindowControl") as WindowControl;
wu.Visible = true;
// подписываем "парента" на получение ивентов от "окна"
wu.OnApply += new WindowControl.CancelDelegate(wu_OnApply);
wu.OnCancel += new WindowControl.CancelDelegate(wu_OnCancel);
wu.Load(некоторые параметры);
}
}
public void pu_OnApply()
{
// некоторый код
}
public void pu_OnCancel()
{
// некоторый код
}
/////////////////////////////////////////////////////////////////////////////////////////////
Кусок исходника "окна"
public partial class WindowControl : System.Web.UI.UserControl
{
public delegate void CancelDelegate();
public delegate void ApplyDelegate();
public event CancelDelegate OnCancel;
public event CancelDelegate OnApply;
public void Load(некотрые параметры)
{
// некоторый код
}
public void btnUpload_Click(object sender, EventArgs e)
{
this.Visible = false;
if (OnApply != null) // здесь после нажатия на btnApply ивент OnApply уже оказывается равным нулю, и "парент" ивента не получает
{
OnApply();
}
}
public void btnCancel_Click(object sender, EventArgs e)
{
this.Visible = false;
if (OnCancel != null) // здесь после нажатия на btnCancel ивент OnCancel уже оказывается равеным нулю, и "парент" ивента не получает
{
OnCancel();
}
}
}
Почему оно обнуляется, я примерно представляю (после постбэка страница перегрузилась, а заново на ивенты никто не подписался), но как в таком случае решить задачу получения нетофикации "паренту" от "окна"? Как вообще решаются подобные задачи?