2015-06-22 2 views
0

В моем пользовательском элементе управления .ascx у меня есть некоторые элементы ImageButton, и при их нажатии они динамически создаются, а затем отображают элемент Calendar, добавляя его в PlaceHolder. У меня есть три из них, и функция будет генерировать идентификатор для каждого календаря, созданного с помощью идентификатора ImageButton, который щелкнут. Я пытаюсь динамически добавлять событие SelectionChanged для каждого созданного календаря.Добавление события onSelectChanged в динамически создаваемые календари

Я объявил пустой календарь объектов как глобальную переменную в начале класса. Я создаю экземпляр нового объекта Calendar onPageLoad, при событии click я добавляю идентификатор, событие и добавляю его в местозаполнитель.

Событие SelectChange, похоже, не работает. Чего не хватает?

public partial class admin_CaptureDate : System.Web.UI.UserControl { protected Calendar DateCalendar;

protected void Page_Init(object sender, EventArgs e) 
{ 
    DateCalendar = new Calendar(); 
    DateCalendar.ID = "DateCalendar"; 
    DateCalendar.Width = 176; 
    DateCalendar.SelectionChanged += Calendar_SelChanged; 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 

} 

protected void ShowCalendar_Click(object sender, ImageClickEventArgs e) 
{ 
    ImageButton btnSender = (ImageButton)sender; 
    string Prefix = btnSender.ID.Substring(14); 
    Trace.Write("this is prefix " + Prefix); 
    this.FindControl(Prefix + "PlaceHolder").Controls.Add(DateCalendar); 
} 
protected void Calendar_SelChanged(object sender, EventArgs e) 
{ 
    Calendar SelectedCalendar = (Calendar)sender; 
    string SelectedDate = SelectedCalendar.SelectedDate.ToLongDateString(); 
    Trace.Write("this is the selected date" + SelectedDate); 
} 

}

Тем не менее не работает, событие не привязан к календарю, что до сих пор не хватает?

ответ

0

Инициализировать календарь, добавить его в элемент управления и добавить обработчик событий в Page_Init. Слишком поздно.

protected void Page_Init(object sender, EventArgs e) 
{ 
    DateCalendar = new Calendar(); 
    DateCalendar.SelectionChanged += Calendar_SelChanged; 
} 

Они также всегда должны иметь тот же идентификатор, что и раньше. Но, кажется, что вы измените идентификатор в соответствии с Button.ID здесь:

string Prefix = btnSender.ID.Substring(14); 
DateCalendar.ID = Prefix + "Calendar"; 

Это не работает. Если вам нужен календарь для нескольких кнопок, добавьте несколько календарей.

+0

Хорошо, у меня есть три элемента ImageButton, каждый из которых имеет отдельную функцию события onClick, которая выполняет те же действия, но создает разные календари с разными идентификаторами. У меня все получилось? – user3523583

+0

@ user3523583: все кнопки могут использовать один и тот же клик evnt-обработчик, но вам нужно три календаря, если вы хотите иметь три идентификатора. Вы также можете использовать один календарь, но потом я не понимаю, почему вы назначаете идентификатор в кнопке click-click habdler. Вы не можете сделать это в обработчике событий, поскольку это слишком поздно в жизненном цикле страницы. –

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