[英]C# - Clear selected calendar date if it is the same
我的 C# 代碼中有一個日歷,如果我單擊同一日期,我希望取消選擇某個日期。 怎么做?
protected void SelectionChangeCalendar(Object sender, EventArgs e){
selected_date = Calendar1.SelectedDate.ToShortDateString();
if(same date is clicked){
Calendar1.SelectedDates.Clear();
}
}
這里的問題是,我相信如果選擇了相同的日期,則不會觸發“SelectionChangeCalendar”。
標記:
<asp:Calendar ID="Calendar1" runat="server" OnSelectionChanged="SelectionChangeCalendar"></asp:Calendar>
編輯:添加標記
編輯:包含來自 yazanpro 的修復
您是正確的,如果您單擊已選擇的日期,則 OnSelectionChanged 事件不會觸發。 但是,它確實會使用事件目標和事件參數回發,就像它是不同的日期一樣,因此您可以檢查表單參數,然后從那里開始。 訣竅是,如果您檢查頁面加載然后清除所選日期,您最終會觸發 OnSelectionChanged 事件並且該日期再次被選中。 但是,如果您等到日歷處理回發數據並確定沒有更改之后,您就可以成功清除日期。 這是我用來讓它工作的代碼:
public partial class WebForm1 : System.Web.UI.Page
{
bool clear = true;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
//if we are here, the date actually changed, so set clear to false
clear = false;
}
protected void Calendar1_PreRender(object sender, EventArgs e)
{
//if clear is true and the event target is the calendar and a date was clicked
if (clear
&& !string.IsNullOrEmpty(Request.Form["__EVENTTARGET"])
&& Request["__EVENTTARGET"].Contains(Calendar1.ID)
&& char.IsDigit(Request.Form["__EVENTARGUMENT"][0]))
{
Calendar1.SelectedDates.Clear(); //clear the date
}
}
}
標記:
<asp:Calendar ID="Calendar1" runat="server" OnPreRender="Calendar1_PreRender" OnSelectionChanged="Calendar1_SelectionChanged"></asp:Calendar>
clear 變量只是跟蹤日期是否實際更改。 如果是,OnSelectionChanged 事件將觸發,我們知道我們不必清除任何日期。 以下是步驟:
1)當頁面回發時,如果事件目標是日歷,則日歷會檢查帖子數據以查看選擇是否已更改。 如果有,它會調用事件處理程序,我們設置clear = false
,這意味着我們知道點擊了不同的日期。 如果選擇沒有改變,日歷將不會觸發 even 和 clear 保持為真。
2)事件處理完畢后,我們使用預渲染事件來檢查事件目標是否是日歷。 如果是,並且 clear 仍然為真,那么我們就知道單擊了所選日期或日歷控件之一。 事實證明,如果單擊控件,則事件參數以字母開頭。 如果單擊日期,則它以數字開頭(參數是自 2000 年 1 月 1 日以來的天數)。 所以我們要做的就是檢查事件參數的第一個字符是否是數字,以查看當前選擇的日期是否被點擊。 如果是這樣,我們清除日期,我們就完成了。
我不知道,它有效,但它聞起來。 也許有更好的方法來做到這一點? 雖然 Calendar 控件似乎並非設計為以這種方式工作。 無論如何,我希望這會有所幫助!
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
//Check if selected Date is in the saved list
// Remove the Selected Date from the saved list
if (SelectedDates.Contains(Calendar1.SelectedDate))
SelectedDates.Remove(Calendar1.SelectedDate);
else
SelectedDates.Add(Calendar1.SelectedDate);
ViewState["Dates"] = SelectedDates;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.