2009-12-18 12 views
6

Rozumiem, że można deklaratywnie przypisać procedurę obsługi zdarzenia do formantu podrzędnego wewnątrz formularza, dodając jego atrybut na stronie aspx (np. Onclick = "Button_Click"), ale jeśli chcę to zrobić programowo, jak bym to zrobił? Tej kontroli nie można znaleźć za pośrednictwem FormView.FindControl w zdarzeniach Init lub Load strony, więc nie można jej przypisać w tych etapach. Zdarzenie DataBound w FormView pozwoli ci znaleźć kontrolę, ale jest niewłaściwe, ponieważ zdarza się to tylko raz, a następnie zdarzenie nie zawsze będzie wiązane i nie zostanie wywołane. Nie pytam, bo nie mogę tego obejść, chciałem tylko wiedzieć, jak to się da zrobić.Przypisywanie zdarzeń programowo do Child Inside FormView

Pozdrawiam.

+0

Naprawdę chciałbym to wiedzieć, ponieważ miałem problemy z dynamicznie ładowanymi kontrolkami użytkownika i powiązaniami z ich zdarzeniami. – rossipedia

+0

Dodano tag obsługi zdarzeń – denny

Odpowiedz

1

w C# jest to realizowane przez:
this.btnProcess.Click + = new EventHandler (btnProcess_Click);

+0

Nie mówię o tym wierszu kodu. Mówię o tym, gdzie umieścić ten wiersz kodu na podstawie konieczności użycia FindControl, aby pobrać kontrolę wewnątrz FormView – Matt

1

Czy próbowałeś PreRender? Myślę, że jest już za późno, ale jestem zaskoczony, że nie było to w twoim poście.

Uważam za dziwne, że dodasz wydarzenie, które spodziewasz się natychmiast zwolnić. Dlaczego nie po prostu zadzwonić do obsługi lub funkcji w tym przypadku.

1

Może ja czegoś brakuje! Zamiast tego możesz użyć propagacji zdarzeń. Ale formant FormView nie ma zdarzenia obsługującego zdarzenia kontrolek podrzędnych. Mamy więc pewne zmiany.

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

} 

Powyższy fragment kodu wykazać, w jaki sposób możemy dodać zdarzenie ItemClick do kontroli Formview do obsługi zdarzeń formantów podrzędnych. Teraz powinieneś odwzorować lub przeciągnąć nowy formant FormView.