You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取指定日期范围外的日期并在AspxDateEdit中禁用?

解决方案

方法一:使用AspxDateEdit的EnabledDateRanges(推荐)

DevExpress的AspxDateEdit控件自带EnabledDateRanges属性,直接添加允许的日期区间后,控件会自动禁用所有区间外的日期,无需手动生成每个禁用日期,效率更高。

实现代码

先定义方法获取所有允许的日期区间:

Private Function GetEnabledDateRanges() As List(Of DateRange)
    Dim enabledRanges As New List(Of DateRange)()
    
    ' 添加示例中的三组允许区间
    enabledRanges.Add(New DateRange(clsCommon.ToDate("2023-03-01"), clsCommon.ToDate("2023-03-03")))
    enabledRanges.Add(New DateRange(clsCommon.ToDate("2023-03-12"), clsCommon.ToDate("2023-03-20")))
    enabledRanges.Add(New DateRange(clsCommon.ToDate("2023-04-10"), clsCommon.ToDate("2023-05-15")))
    
    ' 如果区间是从页面控件读取(比如多组隐藏域),可循环添加
    ' 示例:enabledRanges.Add(New DateRange(clsCommon.ToDate(lblHiddenRange1From.Text), clsCommon.ToDate(lblHiddenRange1To.Text)))
    
    Return enabledRanges
End Function

然后在页面加载时赋值:

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not IsPostBack Then
        datepickerSearchApprovalFrom.EnabledDateRanges.Clear()
        datepickerSearchApprovalFrom.EnabledDateRanges.AddRange(GetEnabledDateRanges())
    End If
End Sub

方法二:手动生成禁用日期(适合特殊场景)

如果不能使用EnabledDateRanges,可以手动计算禁用日期:

  1. 确定控件的有效日期范围(比如控件的MinDate和MaxDate)
  2. 遍历范围内所有日期,判断是否不在任何允许区间内
  3. 将符合条件的日期加入DisabledDates

实现代码

先定义方法判断日期是否在允许区间内:

Private Function IsDateEnabled(targetDate As Date) As Boolean
    Dim allowedRanges As New List(Of Tuple(Of Date, Date))()
    allowedRanges.Add(Tuple.Create(clsCommon.ToDate("2023-03-01"), clsCommon.ToDate("2023-03-03")))
    allowedRanges.Add(Tuple.Create(clsCommon.ToDate("2023-03-12"), clsCommon.ToDate("2023-03-20")))
    allowedRanges.Add(Tuple.Create(clsCommon.ToDate("2023-04-10"), clsCommon.ToDate("2023-05-15")))
    
    ' 检查目标日期是否在任意允许区间内
    For Each range In allowedRanges
        If targetDate >= range.Item1 AndAlso targetDate <= range.Item2 Then
            Return True
        End If
    Next
    Return False
End Function

再生成禁用日期并赋值:

Private Function GetDisabledDates() As IEnumerable(Of Date)
    Dim disabledDates As New List(Of Date)()
    ' 用控件的MinDate和MaxDate作为遍历范围,也可自定义
    Dim startDate As Date = datepickerSearchApprovalFrom.MinDate
    Dim endDate As Date = datepickerSearchApprovalFrom.MaxDate
    
    Dim currentDate As Date = startDate
    While currentDate <= endDate
        If Not IsDateEnabled(currentDate) Then
            disabledDates.Add(currentDate)
        End If
        currentDate = currentDate.AddDays(1)
    End While
    
    Return disabledDates
End Function

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not IsPostBack Then
        datepickerSearchApprovalFrom.DisabledDates.Clear()
        datepickerSearchApprovalFrom.DisabledDates.AddRange(GetDisabledDates())
    End If
End Sub

你当前代码的问题

你的getDateRange方法生成的是允许的日期,但你把它加到了DisabledDates集合中,相当于禁用了本该允许的日期,完全搞反了逻辑。如果要沿用原有思路,应该把这些日期加到EnabledDateRanges而非DisabledDates。


内容的提问来源于stack exchange,提问作者CStudent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:53:12