Назначить событие программно для дочернего элемента внутри FormView - PullRequest
6 голосов
/ 18 декабря 2009

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

Приветствие.

Ответы [ 4 ]

2 голосов
/ 20 декабря 2009

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

Посмотрите эту страницу MSDN для получения дополнительной информации

1 голос
/ 20 декабря 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.

1 голос
/ 19 декабря 2009

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

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

1 голос
/ 18 декабря 2009

в c # это достигается через:
this.btnProcess.Click + = new EventHandler (btnProcess_Click);

...