【问题标题】:Adding onSelectChanged event to a dynamically created calendars将 onSelectChanged 事件添加到动态创建的日历中
【发布时间】:2015-06-22 10:09:17
【问题描述】:

在我的 .ascx 用户控件中,我有一些 ImageButton 元素,当单击这些元素时,它们会动态创建,然后显示日历元素,将其添加到 PlaceHolder。我有其中三个,该函数将为从单击的 ImageButton 的 ID 创建的每个日历生成一个 ID。我正在尝试为创建的每个日历动态添加一个 SelectionChanged 事件。

我在类的开头声明了一个空对象日历作为全局变量。我在PageLoad 上实例化了一个新的Calendar 对象,在点击事件中我添加了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);
}

}

还是不行,事件没有附加到日历,还缺少什么?

【问题讨论】:

    标签: c# asp.net user-controls


    【解决方案1】:

    初始化日历,将其添加到页面的控件集合中,并在Page_Init 中添加事件处理程序。事件为时已晚。

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

    他们还必须始终获得与以前相同的 ID。但是好像你这里根据Button.ID改了ID:

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

    这行不通。如果您需要多个按钮的日历,请添加多个日历。

    【讨论】:

    • 好的,我有三个 ImageButton 元素,每个元素都有一个单独的 onClick 事件函数,该函数执行相同的操作,但创建具有不同 ID 的不同日历。我做对了吗?
    • @user3523583:所有按钮都可以使用相同的点击事件处理程序,但如果您想拥有三个 ID,则需要三个日历。您也可以使用单个日历,但我不明白为什么您在按钮单击 habdler 中分配 ID。您不能在事件处理程序中这样做,因为这在页面的生命周期中已经太晚了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多