我们有一个ASP.Net日历控件,在DayRender事件中,我们有以下代码:
protected void calminical1_DayRender(object sender, DayRenderEventArgs e)
{
CheckBox mycb = new CheckBox();
e.Cell.Controls.Add(mycb);
}
这使得Calendar中的每一天都包含一个CheckBox。这背后的目的和想法是,员工可以通过简单地在他/她想要的日历中选择视觉日来申请休假时间。
问题是,我不知道如何遍历日历以找出用户已检查的日期。
对于GridViews,我经常使用:
foreach (Row x in table.Rows)
{
//loop through all rows
}
基本上我需要做同样的事情,但是对于Calendar控件的“cells”或“days”。这些Web控件中的大多数都具有明显且直观的集合,即下拉列表和其他列表控件具有“项目”,表格和网格视图具有“行”,但我似乎无法找到Calendar控件的等效项。
答案 0 :(得分:1)
这是我最终用来实现我想要的代码。也许其他人会发现它很有用:
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
AddToDates(Calendar1.SelectedDate);
}
private void AddToDates(DateTime newDate)
{
DateTime selecteddate;
ArrayList datelist;
if (ViewState["SelectedDates"] != null)
{
datelist = (ArrayList)ViewState["SelectedDates"];
for (int x = 0; x < datelist.Count; x++)
{
selecteddate = (DateTime)datelist[x];
Calendar1.SelectedDates.Add(selecteddate);
}
}
else
{
datelist = new ArrayList();
}
if (datelist.Contains(newDate))
{
Calendar1.SelectedDates.Remove(newDate);
datelist.Remove(newDate);
}
else
{
Calendar1.SelectedDates.Add(newDate);
datelist.Add(newDate);
}
ViewState["SelectedDates"] = datelist;
}
答案 1 :(得分:0)
也许您应该使用某种数据结构来保存应用程序的状态而不是日历本身。
您可以注册DateSelected-Event以捕获所选日期并保存。之后,您可以遍历已保存的日期。
答案 2 :(得分:0)
我会这样做:
在Javascript中在您的aspx页面上创建一个数组
var dates = new Array();
Sub ca_DayRender(sender As Object, e As DayRenderEventArgs)
Dim d as CalendarDay
Dim c as TableCell
Dim datOrigin as Date = "1-1-2000"
Dim strDayNum as String
d = e.Day
c = e.Cell
strDayNum = CStr(DateDiff("d", datOrigin, d.date))
If d.IsOtherMonth Then
c.Controls.Clear
Else
c.Attributes.Add("OnClick", "dates.push(strDayNum);)
End If
End Sub
然后,当您需要使用
的值时,您可以通过回发访问数组“javascript:__ doPostBack('ca','”&amp; strDayNum&amp;“')”