我在当月有一些事件,当页面加载时,它们会突出显示。但是,如果我将月份更改为上个月或下个月然后回到当前月份,那么在我单击当前月份中的一个日期之前,事件的日期不会突出显示。
我查询数据库以获取可见月份的事件(如果月份已更改)我再次查询数据库。因此,在任何给定时间,我的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;
}
}
}
}
答案 0 :(得分:0)
所有对象都放置在页面生命周期的末尾。因此,如果您更改页面发布的月份,则DataTable
为空。你每次都填这个吗?
因此请始终加载它,但仅指定VisibleDate
和SelectedDate
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;
}