Программно назначить событие дочернему элементу внутри FormView

Я понимаю, что вы можете декларативно назначить обработчик событий дочернему элементу управления внутри формы, добавив его атрибут на страницу aspx (например, onclick="Button_Click"), но если бы я хотел сделать это программно, как бы я это сделал? Этот элемент управления не будет найден с помощью FormView.FindControl в событиях Init или Load страницы, поэтому его нельзя назначить на этих этапах. Событие DataBound в FormView позволит вам найти элемент управления, но это неуместно, так как это происходит только один раз, и тогда событие не всегда будет привязано и не сработает. Я не спрашиваю, потому что я не могу обойти это, я просто хотел знать, как это можно сделать.

Ваше здоровье.


person Matt    schedule 18.12.2009    source источник
comment
Мне действительно хотелось бы это знать, так как у меня были проблемы с некоторыми динамически загружаемыми пользовательскими элементами управления и привязкой к их событиям.   -  person rossipedia    schedule 18.12.2009
comment
Добавлен тег обработки событий   -  person denny    schedule 18.12.2009


Ответы (4)


Вы должны использовать событие ItemCreated FormView. Это происходит после создания всех строк, но до привязки FormView к данным.

Дополнительную информацию см. на этой странице MSDN.

person Gabriel McAdams    schedule 20.12.2009

в c# это достигается с помощью:
this.btnProcess.Click += new EventHandler(btnProcess_Click);

person KellCOMnet    schedule 18.12.2009
comment
Я не говорю об этой строке кода. Я говорю о том, куда поместить эту строку кода, основываясь на необходимости использовать FindControl для захвата элемента управления внутри FormView. - person Matt; 18.12.2009

Вы пробовали PreRender? Я думаю, что это слишком поздно, но я удивлен, что этого не было в вашем посте.

Я нахожу странным, что вы добавили событие, которое вы ожидаете немедленно запустить. Почему бы просто не вызвать обработчик или функцию в этом случае.

person Brad    schedule 18.12.2009

Может я что-то упускаю! Вместо этого вы можете использовать всплывающую подсказку событий. Но элемент управления FormView не имеет события для обработки событий дочерних элементов управления. Итак, у нас есть некоторые изменения.

[System.Web.UI.ToolboxData("<{0}:FormView runat=\"server\" />")]
public class FormView : System.Web.UI.WebControls.FormView
{

    private static readonly object _itemClickEvent = new object();

    [System.ComponentModel.Category("Action")]
    public event EventHandler<System.Web.UI.WebControls.FormViewCommandEventArgs> ItemClick
    {
        add { base.Events.AddHandler(_itemClickEvent, value); }
        remove { base.Events.RemoveHandler(_itemClickEvent, value); }
    }

    protected virtual void OnItemClick(System.Web.UI.WebControls.FormViewCommandEventArgs e)
    {
        EventHandler<System.Web.UI.WebControls.FormViewCommandEventArgs> handler = base.Events[_itemClickEvent] as EventHandler<System.Web.UI.WebControls.FormViewCommandEventArgs>;
        if (handler != null) handler(this, e);
    }

    protected override bool OnBubbleEvent(object source, EventArgs e)
    {
        this.OnItemClick((System.Web.UI.WebControls.FormViewCommandEventArgs)e);
        return base.OnBubbleEvent(source, e);
    }

}

Приведенный выше фрагмент кода продемонстрировал, как мы можем добавить событие ItemClick в элемент управления FormView для обработки событий дочерних элементов управления. Теперь вместо этого вы должны отобразить или перетащить новый элемент управления FormView.

person Mehdi Golchin    schedule 20.12.2009