T-SQL查询以填充可用日期的下拉列表

时间:2012-05-29 06:14:22

标签: c# asp.net sql-server

我的情景:我的网站有活动日历&一个预订表格供访客预订他们的访问让我们说一些花园xyz。当在这个花园举办活动时,游客不得参观花园。

事件日历由管理层维护,如果事件发生在2012-06-16至2012-06-20&为了这次活动,他们为任何游客关闭了花园。

在预订的另一边我必须在下拉菜单或一些弹出日历中显示访客的可用日期,这将阻止在活动日历中预订的日期。

事件数据存储在Event_Calender表中,其中包含

等字段
Event_ID
Event_Name
Event_Start_Date
Event_End_Date
Event_Start_Time
Event_End_Time
Event_Block_Visitor

重要在任何一天,只有50位游客可以参观花园 访客数据存储在Visitor_Booking表格结构

Booking_ID
Booking_Date
Visitor_Name
No_Of_Visitor
EMail_ID
Contact_No

预订表格有一个下拉列表,应显示可用日期基于一个

  1. 事件日历中未预订或屏蔽的日期
  2. 如果6月28日已预订50位访客,则6月28日不应出现在可用的预订日期表中。
  3. 我的表格结构有点复杂,然后在示例中显示。

    如果有人能以最好的方式做到这一点,我将不胜感激。

    我正在尝试使用一个查询&amp; Booked_DatesEvent_Calender Table生成Visitor_Booking使用其他查询我正在尝试从;WITH Calendar AS (SELECT EventID, EventTitle, EventStartDate, EventEndDate, EventEnumDays, EventRecurring, EventStartTime, EventEndTime, EventStartDate AS PlannedDate, EventType, EventCategory FROM EventCalender WHERE EventActive = 1 AND LanguageID = 1 AND EventBlockDate = 1 UNION ALL SELECT EventID, EventTitle, EventStartDate, EventEndDate, EventEnumDays, EventRecurring, EventStartTime, EventEndTime, Dateadd(dd, 1, PlannedDate), EventType, EventCategory FROM Calendar WHERE EventRecurring = 1 AND Dateadd(dd, 1, PlannedDate) <= EventEndDate) SELECT EventID, EventStartDate, EventEndDate, PlannedDate AS [EventDates], EventStartTime, EventEndTime, Cast(EventStartDate AS DATETIME) + '' + Cast(EventStartTime AS DATETIME) AS DT, EventTitle, EventType, EventCategory, Datename(weekday, PlannedDate) AS [WEEKDAY], Getdate() AS [YYYY/MM/DD] FROM Calendar WHERE PlannedDate >= Getdate() AND ',' + EventEnumDays + ',' LIKE '%,' + Cast(Datepart(dw, PlannedDate) AS CHAR(1)) + ',%' OR EventEnumDays IS NULL ORDER BY EventID, PlannedDate OPTION (maxrecursion 0) 表格中预订50个预订日期。

    这将为我提供预订的所有日期。现在我根据这个来阻止日期,如何生成可供访问的日期。

    CTE查询以从偶数日历生成预订日期

    注意:查询结果的一个问题是与查询获取早于指定日期的结果相关的结果。这是由于运营商的优先级

    RESULT

    到目前为止

    脚本:

    {{1}}

1 个答案:

答案 0 :(得分:0)

  1. 获取为活动预订花园的日期
  2. 获取花园已达到完全访问量的日期(== 50)

  3. 合并1和2个结果

  4. 选择日历以显示/选择预订/访问日期
  5. 在日历的加载/月更改事件中,以某种方式禁用在步骤3中收到的日期
  6. 请参阅此示例代码:

       static List<DateTime> lstBookedDates;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                lstBookedDates = new List<DateTime>();
                lstBookedDates.Add(DateTime.Today);
                lstBookedDates.Add(DateTime.Today.AddDays(2));
                lstBookedDates.Add(DateTime.Today.AddDays(-2));
                lstBookedDates.Add(DateTime.Today.AddMonths(1));
                lstBookedDates.Add(DateTime.Today.AddMonths(1).AddDays(2));
            }
        }
    
        protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
        {
            if (lstBookedDates.Where(a=> e.Day.Date.ToShortDateString().Equals(a.Date.ToShortDateString())).Count()>0)
            {
                foreach (Control c in e.Cell.Controls)
                {
                    if (typeof(LiteralControl) == c.GetType())
                    {
    
                        LiteralControl c1 = (LiteralControl)c;
                        c1.Text = "";
                    }
                }
                e.Cell.BackColor = System.Drawing.Color.Gray;
                e.Cell.ToolTip = "Booking full";
                e.Cell.Enabled = false;
    
            }        
        }