【问题标题】:Telerik Rad Calendar - Is Changing Data Source Possible?Telerik Rad 日历 - 是否可以更改数据源?
【发布时间】:2011-11-21 15:48:19
【问题描述】:

我正在尝试更改 RadCalendar 中显示的日期。例如,我希望它在当前日期前 2 周开始,在当前日期后两周结束。有可能吗?

我能够更改单元格中显示的文本(以显示“新”日期),但“OnClick”方法仍然发送“旧”日期。

我添加了 OnDayRender :

e.Cell.Text = "<a href=\"#\">" + _calStartDate.Day.ToString() + "</a>";
_calStartDate = _calStartDate.AddDays(1);

但是日历仍然认为新日期是旧日期,所以“SelectedDate”方法返回“旧”日期并且选择的日期不是当前日期。

有没有办法只传递一个新的日期列表,这会更容易吗?

更新/解决方案:

我能够让它像这样工作:

    private int rowCounter = 0;

    private int rowHeaderCnt = 0;

    private DateTime _startDate;
    private DateTime _endDate;

    private DateTime _calStartDate;
    private DateTime _calEndDate;        

protected void radCalendar_DayRender(object sender, Telerik.Web.UI.Calendar.DayRenderEventArgs e)
    {
        TableRow tr = (TableRow)e.Cell.Parent;
        Table table = (Table)tr.Parent;

        if (e.Day.Date.CompareTo(_calStartDate) < 0)
        {
            ((TableRow)(e.Cell.Parent)).Style["display"] = "none";
        }
        else if (e.Day.Date.CompareTo(_calEndDate) > 0)
        {
            ((TableRow)(e.Cell.Parent)).Style["display"] = "none";
        }
        else if (e.Day.Date.DayOfWeek == DayOfWeek.Sunday)
        {
            // This part will change the week number cell (if you don't display it, hide this part)
            rowCounter++;
            TableCell cellRowHeader = ((TableRow)(e.Cell.Parent)).Cells[0];
            cellRowHeader.Text = rowCounter.ToString();
        }

    }

    protected void Page_Load(object sender, EventArgs e)
    {
        radCalendar.RangeMinDate = _startDate;
        radCalendar.RangeMaxDate = _endDate;
    }

   protected void radCalendar_HeaderCellRender(object sender, Telerik.Web.UI.Calendar.HeaderCellRenderEventArgs e)
    {
        if (e.HeaderType == Telerik.Web.UI.Calendar.HeaderType.Row)
        {
            rowHeaderCnt++;
            e.Cell.Text = "&nbsp;" + rowHeaderCnt;
        }

        if (e.HeaderType == Telerik.Web.UI.Calendar.HeaderType.Column)
        {
            TableRow row = ((TableRow)(e.Cell.Parent));
            row.Cells[0].Text = "&nbsp;" + StringUtil.getStringByLanguage("Week", "Sem.") + "&nbsp;";
        }

    } 


    protected void raCalendar_SelectionChanged(object sender, Telerik.Web.UI.Calendar.SelectedDatesEventArgs e)
    {
        DateTime startDate = new DateTime();            
        DateTime endDate = new DateTime();
        String url = String.Empty;

        if (e.SelectedDates.Count == 1)
        {
            startDate = e.SelectedDates[0].Date;
            endDate = e.SelectedDates[0].Date;
        }
        else
        {
            startDate = e.SelectedDates[0].Date;
            endDate = e.SelectedDates[e.SelectedDates.Count - 1].Date;
        }

       // ... add code here with startDate and endDate

    }

    public void initCalendar(DateTime startDate, DateTime endDate)
    {
        this._startDate = startDate;
        this._endDate = endDate;

        this._calStartDate = startDate;
        this._calEndDate = endDate;

        while (this._calStartDate.DayOfWeek != DayOfWeek.Sunday)
        {
            this._calStartDate = this._calStartDate.AddDays(-1);
        }

        while (this._calEndDate.DayOfWeek != DayOfWeek.Saturday)
        {
            this._calEndDate = this._calEndDate.AddDays(1);
        }

    }

【问题讨论】:

    标签: c# asp.net calendar telerik


    【解决方案1】:

    根据我的尝试,您可以非常接近此设置。不过,您必须使用一些技巧,因为据我所知,该功能并未内置于日历中,仅显示您要求的日期。

    页面加载时:

    protected void Page_Load(object sender, EventArgs e)
    {
        RadCalendar1.RangeMinDate = DateTime.Now.AddDays(-14);
        RadCalendar1.RangeMaxDate = DateTime.Now.AddDays(14);
        RadCalendar1.FirstDayOfWeek = (FirstDayOfWeek)DateTime.Now.AddDays(-14).DayOfWeek; 
    }
    

    当天渲染:

    protected void RadCalendar1_DayRender1(object sender, Telerik.Web.UI.Calendar.DayRenderEventArgs e)
    {
        if (e.Day.Date >= RadCalendar1.RangeMinDate.Date && e.Day.Date <= RadCalendar1.RangeMaxDate.Date)
        {
            e.Cell.Visible = true;
        }
        else
        {
            e.Cell.Visible = false;
        }
    }
    

    这将为您提供一个显示 2 周前和 2 周前的初始日历负载,并且只允许用户在该日期内进行选择。它没有做什么,我猜这是一个单独的问题,当您分页到下个月时,它不会执行隐藏范围之外的日期。

    您必须注意,根据工具本身的设计,日历的格式必须为 42 天。这就是为什么您会看到顶部的空白行,因为我们隐藏了那些日子。据我所知,您无法删除它们,只能隐藏或显示它们,但不允许点击它们。

    【讨论】:

    • 谢谢,您的解决方案帮助了我!我能够像这样隐藏一个完整的行: ((TableRow)(e.Cell.Parent)).Style["display"] = "none"; (请参阅原始帖子中的更新解决方案)
    • 太棒了,学习总是很有趣:P。下次我会保留这些知识。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    相关资源
    最近更新 更多