2009-12-18 6 views
6

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

Cheers.

+0

Я действительно хотел бы знать это, так как у меня были проблемы с некоторыми динамически загруженными элементами управления пользователями и привязкой к их событиям. – rossipedia

+0

Добавленный тег обработки событий – denny

ответ

1

в C# это осуществляется посредством:
this.btnProcess.Click + = new EventHandler (btnProcess_Click);

+0

Я не говорю об этой строке кода. Я говорю о том, где поставить эту строку кода на основе использования FindControl для захвата элемента управления внутри FormView – Matt

1

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

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

2

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

Look at this MSDN page for more information

1

Может быть, я что-то не хватает! Вместо этого вы можете использовать пузырьки событий. Но элемент управления 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.

Смежные вопросы