очень приятно. Работает с большинством браузеров, но плохо работает с Chrome 11.0.696.71 и Safari для Windows (не тестировался на Mac)
В течение нескольких месяцев элемент управления календаря отображает дополнительную неделю в начале месяца. (когда 1-е число месяца является первым днем недели.)
Когда вы устанавливаете e.cell.Visible = false, элементы не отображаются. Таким образом, в Chrome вы получите строку <tr></tr>
. Chrome отображает это как пустую строку. И так как я не думаю, что есть способ установить высоту / стиль элемента TR с помощью элемента управления календаря, вы получите уродливый календарь, в котором отсутствуют первые строки в определенные месяцы.
Также установка высоты в 0 ничего не делает, когда вы устанавливаете Visible = false. Если вы не установите Visible = false и просто установите height = 0, он все равно не будет правильно отображаться в Chrome. Таким образом, решение состоит в том, чтобы установить высоту 1
Вот мое модифицированное решение.
Следователь
protected void Calendar1_DayRender(object sender, DayRenderEventArgs e){
hideExtraWeek(sender, e, (DayOfWeek)Calendar1.FirstDayOfWeek);
}
функция
protected void hideExtraWeek(object sender, DayRenderEventArgs e, DayOfWeek dw){
if (dw == (DayOfWeek)7) dw = (DayOfWeek)0; // FirstDayOfweek returns 7 when set to default, But it's zero based so valid values are 0 to 6
Boolean blnBrowserDoesntSupportsEmptyRow= Request.Browser.Browser=="Chrome" ||
Request.Browser.Browser=="Safari";
int dayOfWeek = Convert.ToInt16(e.Day.Date.DayOfWeek);
int compensate = dayOfWeek - Convert.ToInt16(dw);
DateTime WeekStart = e.Day.Date.AddDays(-1 * compensate);
DateTime WeekEnd = WeekStart.AddDays(6);
// If the start and end of the week does not have relevance to the current month
if (WeekStart.Month==WeekEnd.Month && e.Day.IsOtherMonth){
e.Cell.Text = "";
e.Cell.Height = 1; // fix for chrome. Visible=false leaves a blank row even when there are no <td>s in the <tr>
e.Cell.Visible = blnBrowserDoesntSupportsEmptyRow;
}
}