在ASP.Net日历中取消选择日期,并捕获第二次单击

在ASP.Net日历中取消选择日期,并捕获第二次单击,asp.net,calendar,Asp.net,Calendar,我在ASP.Net应用程序中工作。其中,在日历上选择一个日期意味着一项任务已经完成,这样记录就可以进入SQL数据库。但是,有时用户会错误地选择日期,因此我需要给他们机会以某种方式取消选择日期。 我认为让用户这样做的最自然的方式是在选定的日期再次单击。 我试图通过“SelectionChanged”日历的事件实现这一点,但它没有触发再次单击所选日期,这是有意义的,因为实际上所选日期没有改变。 然后我尝试使用“DayRender”事件。因此,我将SelectedDate与VisibleDate进行比

我在ASP.Net应用程序中工作。其中,在日历上选择一个日期意味着一项任务已经完成,这样记录就可以进入SQL数据库。但是,有时用户会错误地选择日期,因此我需要给他们机会以某种方式取消选择日期。 我认为让用户这样做的最自然的方式是在选定的日期再次单击。 我试图通过“SelectionChanged”日历的事件实现这一点,但它没有触发再次单击所选日期,这是有意义的,因为实际上所选日期没有改变。 然后我尝试使用“DayRender”事件。因此,我将SelectedDate与VisibleDate进行比较,如果两个属性的日期相同,则清除日期,否则选择日期。 它在第一次调用事件时起作用,但在第二天必须渲染时再次触发事件并清除日期:D

protected void Claim_Edit_PickupDone_Calendar_DayRender(object sender, DayRenderEventArgs e)
{
  Calendar cal = (Calendar)sender;
  if (cal.SelectedDate == cal.VisibleDate)
  {
     cal.SelectedDates.Clear();
     cal.VisibleDate = DateTime.MinValue;
  }
  else
  {
     cal.VisibleDate = cal.SelectedDate;
     cal.SelectedDayStyle.BackColor = System.Drawing.Color.Goldenrod;
  }      
}
我还在模板中放置了一个复选框,但对我来说这似乎不自然。 有人能帮我抓住第二个点击吗?或者最好不要选中复选框?
致以最诚挚的问候。

诀窍在于编写良好的逻辑,而不是编写任意代码

我更喜欢编写TextBox\u TextChanged事件来检查TextBox是否为空,并触发DB调用以清除日期字段


相反,您可以使用本文中实现的解决方案

为什么不能简单地编写textbox\u textchanged事件?让用户清空所选日期的文本框,并向db发送指令以清除该日期field@techspider. 嘿,谢谢分享你的想法。这听起来一点也不坏。让我看看它是如何进行的,我会回到你那里。在你提供的主题上,按钮触发逻辑,我对复选框做了什么。我还在考虑留下一个文本框的想法,因为它会导致一场噩梦,控制用户输入的内容。我不得不在周末考虑这个问题,但非常感谢你分享我的想法。:)我将您的解决方案保存在一个按钮清除选定日期的位置。它比复选框更清晰,因为它只需要一行代码,这使它更易于维护。几分钟后我又写了一遍代码。非常感谢;这就是我的意思:)没问题