Здравствуйте. В моей программе есть календарь, в котором есть возможность выбрать несколько дат отдельно. При попытке написать код на выбор диапазона дат, выбирается только начальная дата, дальнейший выбор невозможен.
Кусок с выбором диапазона дат и отдельных дат:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
if (DropDownList17.SelectedValue == "1"){
//Check if selected Date is in the saved list
// Remove the Selected Date from the saved list
if (SelectedDates.Contains(Calendar1.SelectedDate))
SelectedDates.Remove(Calendar1.SelectedDate);
else
SelectedDates.Add(Calendar1.SelectedDate);
if (!SelectedDates.Remove(Calendar1.SelectedDate))
Calendar1.SelectedDates.Clear();
else
SelectedDates.Add(Calendar1.SelectedDate);
ViewState["Dates"] = SelectedDates;
//foreach (DateTime dt in Calendar1.SelectedDates)
//{
// TextBox1.Text = dt.ToShortDateString();
//}
}
else{
if (SelectedDates.Count == 0)
{
d1 = Calendar1.SelectedDate;
SelectedDates.Add(Calendar1.SelectedDate);
}
else
{
if (SelectedDates.Count == 1)
{
d2 = Calendar1.SelectedDate;
for (DateTime i = d1.AddDays(1); i <= d2; i.AddDays(1))
{
TextBox15.Text += i;
SelectedDates.Add(i);
}
}
else
{
foreach (DateTime dt in SelectedDates)
Calendar1.SelectedDates.Remove(dt);
ViewState["Dates"] = null;
}
}
ViewState["Dates"] = SelectedDates;
}
}
Полный код календаря:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
//контейнер дат выбранных на календаре
public List<DateTime> SelectedDates
{
get
{
if (ViewState["Dates"] == null)
ViewState["Dates"] = new List<DateTime>();
return (List<DateTime>)ViewState["Dates"];
}
set
{
ViewState["Dates"] = value;
}
}
DateTime d1, d2;
//данное событие вызывается при выборе пользователем определенной даты
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
if (DropDownList17.SelectedValue == "1"){
//Check if selected Date is in the saved list
// Remove the Selected Date from the saved list
if (SelectedDates.Contains(Calendar1.SelectedDate))
SelectedDates.Remove(Calendar1.SelectedDate);
else
SelectedDates.Add(Calendar1.SelectedDate);
if (!SelectedDates.Remove(Calendar1.SelectedDate))
Calendar1.SelectedDates.Clear();
else
SelectedDates.Add(Calendar1.SelectedDate);
ViewState["Dates"] = SelectedDates;
//foreach (DateTime dt in Calendar1.SelectedDates)
//{
// TextBox1.Text = dt.ToShortDateString();
//}
}
else{
if (SelectedDates.Count == 0)
{
d1 = Calendar1.SelectedDate;
SelectedDates.Add(Calendar1.SelectedDate);
}
else
{
if (SelectedDates.Count == 1)
{
d2 = Calendar1.SelectedDate;
for (DateTime i = d1.AddDays(1); i <= d2; i.AddDays(1))
{
TextBox15.Text += i;
SelectedDates.Add(i);
}
}
else
{
foreach (DateTime dt in SelectedDates)
Calendar1.SelectedDates.Remove(dt);
ViewState["Dates"] = null;
}
}
ViewState["Dates"] = SelectedDates;
}
}
//данное событие происходит при создании каждой ячейки даты элемента управления Calendar
protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
{
//запрет выбора дат до сегодняшней включительно
if (e.Day.Date <= DateTime.Today){
e.Day.IsSelectable = false;
}
}
protected void Calendar1_PreRender(object sender, EventArgs e)
{
// Reset Selected Dates
Calendar1.SelectedDates.Clear();
// Select previously Selected Dates
foreach (DateTime dt in SelectedDates)
Calendar1.SelectedDates.Add(dt);
ViewState["Dates"] = SelectedDates;
foreach (DateTime dt in Calendar1.SelectedDates)
{
//TextBox1.Text = dt.ToShortDateString();
}
}
//очистка календаря
protected void Button2_Click(object sender, EventArgs e)
{
//Calendar1.SelectedDates.Clear();
foreach (DateTime dt in SelectedDates)
Calendar1.SelectedDates.Remove(dt);
ViewState["Dates"] = null;
}
1.
2.
3.
<asp:Calendar ID="Calendar1" runat="server" onselectionchanged="Calendar1_SelectionChanged" OnDayRender="Calendar1_DayRender" OnPreRender="Calendar1_PreRender">
<SelectedDayStyle BackColor="#009933" />
</asp:Calendar>
Подскажите, пожалуйста, как сделать так, чтобы выбирался диапазон дат.