2015-06-22 110 views
0

在我的.ascx用戶控件中,我有一些ImageButton元素,當它們被點擊時,它們會動態創建,然後顯示Calendar元素將其添加到PlaceHolder。我有他們三個,該功能將生成每個日曆的ID從所點擊的ImageButton的ID創建。我正在嘗試爲每個創建的日曆動態添加一個SelectionChanged事件。將onSelectChanged事件添加到動態創建的日曆中

我在類的開頭聲明瞭一個空的對象日曆作爲全局變量。我實例化一個新的日曆對象onPageLoad,在點擊事件我添加ID,事件並將其添加到佔位符。

雖然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; 
} 

他們也總是得到和以前一樣的ID。但看起來你改變的ID根據Button.ID這裏:

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

這是行不通的。如果您需要多個按鈕的日曆,請添加多個日曆。

+0

好的,我有三個ImageButton元素,每個元素都有一個單獨的onClick事件函數,它執行相同的操作,但創建具有不同ID的不同日曆。我說得對嗎? – user3523583

+0

@ user3523583:所有按鈕都可以使用相同的點擊evnt處理程序,但如果您想擁有三個ID,則需要三個日曆。你也可以使用單個日曆,但是我不明白你爲什麼在按鈕單擊habdler中分配ID。你不能在事件處理程序中這樣做,因爲在頁面的生命週期中這太遲了。 –