內建 Calendar 控件無法滿足「下拉式、點擊按鈕顯示、選擇後自動隱藏、值回填輸入框」的需求,故開發復合控件 DatePicker。
AquaCalendarDatePicker 繼承 WebControl 並實作 IPostBackEventHandlerprotected override void CreateChildControls()
{
Controls.Clear();
_Calendar = new Calendar();
_Calendar.ID = MyCalendarID;
_Calendar.SelectedDate = DateTime.Parse(Text);
// ... 設定標題、字型、顏色、導航文字等樣式 ...
_Calendar.Style.Add("display", "none"); // 預設隱藏
_Calendar.SelectionChanged += _Calendar_SelectionChanged;
this.Controls.Add(_Calendar);
}
Text:日期值,支援長/短格式切換,含驗證邏輯Enabled:重寫基類屬性,同步禁用按鈕ButtonStyle / ButtonText:自訂按鈕外觀DateFormat:CalendarEnum.LongDateTime / ShortDateTimeBrowsable(false) 屬性:輸出 ClientID/UniqueID 供前端腳本使用產生 2×2 表格:
type="text")type="submit"),onclick 綁定 __doPostBack// 實作 IPostBackEventHandler
public void RaisePostBackEvent(string eventArgument)
{
OnClick(EventArgs.Empty);
}
protected virtual void OnClick(EventArgs e)
{
if (_Calendar.Attributes["display"] != "")
{
_Calendar.SelectedDate = DateTime.Parse(Text);
_Calendar.Style.Add("display", ""); // 顯示日曆
}
}
private void _Calendar_SelectionChanged(object sender, EventArgs e)
{
Text = _Calendar.SelectedDate.ToString();
_Calendar.Style.Add("display", "none"); // 隱藏日曆
}