Обмен нотификацией между юзер контролами
От: busybox  
Дата: 03.07.07 07:01
Оценка: 6 (2) +1
Есть юзер контрол (назовем его "парент"), на котором есть грид. В гриде в каждой строчке есть кнопка (назовем её "кнопка"). По нажатию этой "кнопки" рядом с ней появляется другой юзер контрол (назовем его "окно"). В "окне" есть куча полей и две кнопки Apply и Cancel. Необходимо как-то при нажатии на любую из этих кнопок (Apply or Cancel) организовать нотификацию "паренту" чтоб он мог обновить грид. Как это лучше сделать?

___________________________________________________________
| "парент" |
| Грид |
| -----------кнопка- |
| |----------кнопка-| _______________ |
| |----------кнопка-|--->|"окно" | |
| |----------кнопка-| | | |
| |----------кнопка-| |Apply Cancel| |
| |----------кнопка-| |_______________| |
| |
| |
|___________________________________________________________|


Пробовал делать так (но не работает):

Кусок исходника "парента":

// обработчик команд грида
protected void grdParent_ItemCommand(object source, DataGridCommandEventArgs e)
{

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();
}
}
}

Почему оно обнуляется, я примерно представляю (после постбэка страница перегрузилась, а заново на ивенты никто не подписался), но как в таком случае решить задачу получения нетофикации "паренту" от "окна"? Как вообще решаются подобные задачи?
Re: Обмен нотификацией между юзер контролами
От: vavdonin  
Дата: 03.07.07 07:07
Оценка:
Здравствуйте, busybox!

Я столкнулся примерно с такой же проблемой!! Все, кто знает хоть малейший намёк на решение, прошу откликнуться!!
Re[2]: Обмен нотификацией между юзер контролами
От: kirill_dot_net Россия  
Дата: 03.07.07 07:38
Оценка:
Здравствуйте, vavdonin, Вы писали:

V>Здравствуйте, busybox!


V>Я столкнулся примерно с такой же проблемой!! Все, кто знает хоть малейший намёк на решение, прошу откликнуться!!


Если я правильно понял, то так:

на странице (или в родительском контроле):
Protected WithEvents control As MyControl

Private Sub control_OnDoSomething() Handles control.OnDoSomething
end sub

в контроле
Public Event OnDoSomething()

и где-нить, где нужно событие в контроле — RaiseEvent OnRegistrate()
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.