我的情景:我的网站有活动日历&一个预订表格供访客预订他们的访问让我们说一些花园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
预订表格有一个下拉列表,应显示可用日期基于一个
我的表格结构有点复杂,然后在示例中显示。
如果有人能以最好的方式做到这一点,我将不胜感激。
我正在尝试使用一个查询& Booked_Dates
从Event_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查询以从偶数日历生成预订日期
注意:查询结果的一个问题是与查询获取早于指定日期的结果相关的结果。这是由于运营商的优先级
到目前为止
脚本:
{{1}}
答案 0 :(得分:0)
获取花园已达到完全访问量的日期(== 50)
合并1和2个结果
请参阅此示例代码:
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;
}
}