基于数据库选择在 ajax 日历控件中突出显示/禁用特定日期

Posted

技术标签:

【中文标题】基于数据库选择在 ajax 日历控件中突出显示/禁用特定日期【英文标题】:Higlight/disable specific dates in ajax calendar control based on database selection 【发布时间】:2012-05-30 07:13:43 【问题描述】:

我需要使用 ajax 日历控件来显示当前日期的日期并禁用和突出显示存储在数据库表中的日期。

我可以禁用以前的日期并将选择限制为距当前日期一个月,并且还可以突出显示已在 asp.net 日历控件中为活动预订但在 ajax 日历控件中未预订的日期。

以下代码在 ajaxcalander 控件中生成错误:

   protected void AjaxCalendar_PreRender(object sender, EventArgs e)  
   
        //startdate= enddate="2012-06-25"
        DateTime startDate = Helper.GetUAEDateTime();
        DateTime endDate = DateTime.Now.AddDays(10);

        AjaxCalendar.StartDate = startDate;
        AjaxCalendar.EndDate = endDate;

        // If the month is CurrentMonth
        if (!e.Day.IsOtherMonth)
        
            foreach (DataRow dr in ds.Tables[0].Rows)
            
                if ((dr["BookingDate"].ToString() != DBNull.Value.ToString()))
                
                    DateTime dtEvent = (DateTime)dr["BookingDate"];
                    if (dtEvent.Equals(e.Day.Date))
                    
                        e.Cell.BackColor = Color.PaleVioletRed;
                        e.Day.IsSelectable = false;

                    
                
            
        
        //If the month is not CurrentMonth then hide the Dates
        else
        
            e.Cell.Text = "";
        
    

错误由以下代码生成 if (!e.Day.IsOtherMonth)

CS1061:“System.EventArgs”不包含“Day”的定义,并且找不到接受“System.EventArgs”类型的第一个参数的扩展方法“Day”(您是否缺少 using 指令或程序集参考?)

html

<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:CalendarExtender ID="AjaxCalendar" runat="server"  
     TargetControlID="TextBox2" Format="yyyy-MM-dd" 
     onprerender="AjaxCalendar_PreRender"  >
</asp:CalendarExtender>

如果我将相同的代码块放在 asp.net 日历控件中,它可以正常工作

我花了几个小时寻找可以帮助我解决此问题的解决方案或代码示例,但没有成功。我将不胜感激。

我查看了 100 个示例,但其中大多数显示阻塞旧日期或使用 javascript 的周末,但我想使用后面的代码来实现它。 ajax 日历控件中可用的一天渲染事件

【问题讨论】:

【参考方案1】:
<AjaxControl:CalendarExtender ID ="myCalendar" runat=”server” TargetControlID=”txtDateTime” OnClientShown="disablenonthursdays">
</AjaxControl:CalendarExtender>

<script language="javascript">
function disablenonthursdays(sender, args)

     for(var day =0; day <sender._days.all.length; day++)
    
              for(var weekday =0; weekday < 6; weekday++)
             
                    if(sender._days.all[day].id != “calendarValidToDate_day_”+ weekday +”_4″)
                   
                          sender._days.all[day].disabled = true;
                          sender._days.all[day].innerHTML = “<div>” +sender._days.all[day].innerText+ “</div>”;
                    
            
     

</script>

【讨论】:

【参考方案2】:

这是正确的,因为 e 是 EventArgs 类型,它包含有关事件的信息。 我不知道 PreRender-Event 中的实际类型,但您应该能够调试代码并且需要将 e 转换为实际类型才能访问属性 'Day'。

【讨论】:

是他们实现/继承asp.net日历控件事件的一种方式,这样我就可以使用e.Day.IsOtherMonth;使我的逻辑在ajax日历控件中工作。 OP 已将该代码用于 ASP.NET 日历控件,现在他希望它们具有与 Ajax-CalendarExtender 相同的功能。恐怕这是不可能的,因为它是一个仅限客户端的控件,而您希望它从服务器端进行控制。您可能想改用 CustomValidators。查看以下链接,了解哪些是可能的,哪些不是:dotnetfunda.com/articles/article1001-ajax-calendarextender.aspx 和 dotnetcurry.com/ShowArticle.aspx?ID=149 我现在没有,CalendarExtender 是客户端控件。这不是意味着 runat=server 是错误的吗? 你可以访问它,但你不能真正改变它的行为(比如特殊日子的不同 css)。您可以尝试使用它的主题功能并覆盖适当的 css 类:asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/Calendar/… 类似的问题:forums.asp.net/t/1717783.aspx/1【参考方案3】:

我认为您可以使用 Calandar controlPopupControl Extender 来做到这一点。你可以对Calendar control 做所有你做的事情,它就像Calendar Extender。也检查this link。

【讨论】:

以上是关于基于数据库选择在 ajax 日历控件中突出显示/禁用特定日期的主要内容,如果未能解决你的问题,请参考以下文章

在 jQuery 日历中突出显示数据库中的日期

在 720kb 日历上突出显示日期

如何在wps表格中插入日历表

如何在 jQuery 中突出显示日期?

android日历控件

asp.net 日历控件中当前选择的月份