gpt4 book ai didi

asp.net - 如何删除日历的最后一周

转载 作者:行者123 更新时间:2023-12-04 13:45:02 26 4
gpt4 key购买 nike

我不知道为什么其他人以前没有问过这个。但是,您是否注意到asp:Calendar在结尾显示了额外的一周?

例如,如果将VisibleMonth设置为2010-03-01,并将FirstDayOfWeek设置为Sunday:
它将显示6周。

  • 2月28日至3月6日
  • 3月7日至3月13日
  • 3月14日至3月20日
  • 3月21日至3月27日
  • 3月28日至4月3日
  • 4月4日至4月10日

  • 我想知道为什么Microsoft显示最后的Row完全在4月。我试图在网上搜索属性,但似乎不存在。

    我唯一想到的解决方案是重写Pre_Render并检查所有单个日期(如果它们仍在VisibleDate的一周内)。但这当然是一项极端的检查,因为控件的每个呈现都将其显示出来。

    这是我的工作。
    protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
    {
    int dayOfWeek = Convert.ToInt16(e.Day.Date.DayOfWeek);
    int compensate = dayOfWeek - Convert.ToInt16(DayOfWeek.Sunday);
    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 != Calendar1.VisibleDate.Month &&
    WeekEnd .Month != Calendar1.VisibleDate.Month)
    {
    e.Cell.Text = "";
    e.Cell.Height = 0;
    e.Cell.Visible = false;
    }
    }

    最佳答案

    非常好。适用于大多数浏览器,但不适用于Chrome 11.0.696.71和Safari(适用于Windows)(尚未在Mac上进行过测试)

    在某些月份中,日历控件会在月初显示额外的一周。 (当月的第一天是一周的第一天时。)

    设置e.cell.Visible = false时,它不会渲染elements。因此,在chrome中,您最终会得到<tr></tr>行。 Chrome将此显示为空白行。而且由于我认为没有办法通过日历控件设置TR元素的高度/样式,因此您最终会看到一个难看的日历,并且在某些月份中丢失了它的第一行。

    当您将Visible = false设置为0时,将setitng height设置为0也不会执行任何操作。如果您未设置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;
    }
    }

    关于asp.net - 如何删除日历的最后一周,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2514065/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com