如果事件与日期相关联,Asp.net如何突出显示日期

时间:2015-10-15 11:35:45

标签: c# asp.net date calendar

我在当月有一些事件,当页面加载时,它们会突出显示。但是,如果我将月份更改为上个月或下个月然后回到当前月份,那么在我单击当前月份中的一个日期之前,事件的日期不会突出显示。

我查询数据库以获取可见月份的事件(如果月份已更改)我再次查询数据库。因此,在任何给定时间,我的DataTable都会保存当前可见月份的事件。

之前我从未使用过asp.net日历控件,所以我不太清楚如何更改月份更改的日期。

这是我的代码:

 protected void CalendarDRender(object sender, System.Web.UI.WebControls.DayRenderEventArgs e)
{

        foreach (DataRow dr in table.Rows)
        {
            lblError.Text = dr["caldate"].ToString();
            if ((dr["caldate"].ToString() != DBNull.Value.ToString()))
            {
                DateTime dtEvent = (DateTime)dr["caldate"];
                if (dtEvent.Equals(e.Day.Date))
                {
                    e.Cell.BackColor = Color.PaleVioletRed;
                }
            }
        }
}

1 个答案:

答案 0 :(得分:0)

所有对象都放置在页面生命周期的末尾。因此,如果您更改页面发布的月份,则DataTable为空。你每次都填这个吗?

因此请始终加载它,但仅指定VisibleDateSelectedDate if(!IsPostBack)

protected void Page_Load(object sender, EventArgs e)
{
    table = LoadTableFromDB();
    if (!IsPostBack)
    {
        calendar.VisibleDate = DateTime.Today;
        calendar.SelectedDate = DateTime.Today;
    }
}

您还可以在LINQ的帮助下使DayRender更具可读性:

protected void CalendarDRender(object sender, System.Web.UI.WebControls.DayRenderEventArgs e)
{
    bool dayHasEvent = table.AsEnumerable()
        .Any(row => row.Field<DateTime>("caldate").Date == e.Day.Date);
    if (dayHasEvent)
        e.Cell.BackColor = Color.PaleVioletRed;
}