如何基于文本框设置日历控件的初始打开日期?
实现日历控件首次点击定位到文本框指定日期
完全可以实现这个需求。你当前的代码只设置了日历的SelectedDate,但没同步设置VisibleDate属性——这个属性才是控制日历打开时默认显示的日期位置的,所以首次点击时才会默认跳到当前日期。
只需要在点击图片按钮显示日历的逻辑里,同时设置VisibleDate和SelectedDate即可,另外建议加上日期格式的校验,避免文本框内容非法导致报错。
修改后的代码如下:
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { LoadGV(); } } protected void ImageButton1_Click(object sender, ImageClickEventArgs e) { if (Calendar1.Visible) { txtTime.Text = Calendar1.SelectedDate.ToString("yyyy/MM/dd"); Calendar1.Visible = false; } else { Calendar1.Visible = true; Calendar1.Attributes.Add("style", "BACKGROUND: white; POSITION: absolute"); // 先校验文本框日期格式是否合法 if (DateTime.TryParse(txtTime.Text, out DateTime targetDate)) { Calendar1.SelectedDate = targetDate; // 设置VisibleDate,让日历打开时定位到目标日期所在月份 Calendar1.VisibleDate = targetDate; } // 如果日期不合法,可添加默认处理,比如定位到当前日期 else { Calendar1.SelectedDate = DateTime.Now; Calendar1.VisibleDate = DateTime.Now; } } } protected void Calendar1_SelectionChanged(object sender, EventArgs e) { Session["TIME"] = Calendar1.SelectedDate.ToString("yyyy/MM/dd"); txtTime.Text = Calendar1.SelectedDate.ToString("yyyy/MM/dd"); Calendar1.Visible = false; } protected void Calendar1_DayRender(object sender, DayRenderEventArgs e) { if (e.Day.IsOtherMonth) { e.Day.IsSelectable = false; } }
这样修改后,当页面加载完成文本框已有指定日期(比如2011/05/15),用户首次点击日历按钮时,日历就会自动定位到该日期所在的月份,并且选中该日期。
内容的提问来源于stack exchange,提问作者ServalChan
相关产品推荐
相关产品推荐

