0

我们有一个 ASP.Net 日历控件,在 DayRender 事件中,我们有以下代码:

protected void calminical1_DayRender(object sender, DayRenderEventArgs e)
{
    CheckBox mycb = new CheckBox();
    e.Cell.Controls.Add(mycb);
}

这使得日历中的每一天都包含一个复选框。这背后的目的和想法是,员工可以通过简单地在日历中选择他/她想要休假的日子来申请休假。

问题是,我不知道如何遍历日历以找出用户检查的日期。

对于 GridViews,我经常使用:

foreach (Row x in table.Rows)
{
   //loop through all rows
}

本质上我需要做同样的事情,但对于日历控件的“单元格”或“天数”。这些网络控件中的大多数都具有明显且直观的集合,即下拉列表和其他列表控件具有“项目”,表格和网格视图具有“行”,但我似乎无法找到日历控件的等价物。

4

3 回答 3

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;
}
于 2012-05-08T07:21:58.940 回答
0

也许您应该使用某种数据结构来保存应用程序的状态,而不是日历本身。

您可以注册 DateSelected-Event 以捕获选定的日期并保存它。之后,您可以循环浏览您保存的日期。

于 2012-05-08T00:41:21.843 回答
0

我会这样做:

在 Javascript 中在您的 aspx 页面上创建一个数组

var 日期=新数组();

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','" & strDayNum & "')"

于 2012-05-08T00:46:38.030 回答