New to Telerik UI for ASP.NET AJAXStart a free 30-day trial

How to implement Resource paging

HOW-TO

Implement Resource paging.

DESCRIPTION

One nice way to display a long list of resources in RadScheduler and improve performance is to use paging:

Pagination for resources is not provided out-of-the-box, but it can easily be implemented with a little bit of coding.

SOLUTION

The underlying method to achieve the above described functionality is to manipulate the Resources collection of RadScheduler in its DataBound event. We cycle through all resources and remove those that do not fall in the currently selected range. We also add those resources which we have removed to another collection saved in a session and use it in FormCreating to populate the resources which we have removed in DataBound.

C#
private const int PageSize = 2;
     
    protected void Page_Init(object sender, EventArgs e)
    {
        XmlSchedulerProvider provider = new XmlSchedulerProvider(Server.MapPath("~/App_Data/Appointments_MultipleResources.xml"), true);
        RadScheduler1.Provider = provider;
    }
    protected void RadScheduler1_DataBound(object sender, EventArgs e)
    {
        RadScheduler1.ResourceTypes.FindByName("User").AllowMultipleValues = true;
        int pageIndex = (int?)ViewState["PageIndex"] ?? 0;
        IList<Resource> pagedResources = new List<Resource>(RadScheduler1.Resources.GetResourcesByType("User"));
        IList<Resource> remainingResources = new List<Resource>();
        int resourceCount = pagedResources.Count;
        int pageStart = pageIndex * PageSize;
        int pageEnd = pageStart + PageSize;
         
        int resourceIndex = 0;
        foreach (Resource resource in pagedResources)
        {
            if (resourceIndex < pageStart || resourceIndex >= pageEnd)
            {
                RadScheduler1.Resources.Remove(resource);
                remainingResources.Add(resource);
            }  
            resourceIndex++;
        }
        int pageEndToDisplayInPagingStatus = pageStart + RadScheduler1.Resources.GetResourcesByType("User").Count;
        Session["remainingResources"] = remainingResources;
        PagingStatus.Text = string.Format("Showing pages {0} to {1} of {2} total.", pageStart + 1, pageEndToDisplayInPagingStatus, resourceCount);
        int pageCount = (int) Math.Ceiling((double)resourceCount / (double)PageSize);
        NextPage.Enabled = pageIndex < pageCount-1;
        PrevPage.Enabled = pageIndex > 0;
    }
    protected void NextPage_Click(object sender, EventArgs e)
    {
        int pageIndex = (int?)ViewState["PageIndex"] ?? 0;
        pageIndex++;
        ViewState["PageIndex"] = pageIndex;
        RadScheduler1.Rebind();
    }
    protected void PrevPage_Click(object sender, EventArgs e)
    {
        int pageIndex = (int?)ViewState["PageIndex"] ?? 0;
        pageIndex = Math.Max(pageIndex - 1, 0);
        ViewState["PageIndex"] = pageIndex;
        RadScheduler1.Rebind();
    }
     
    protected void RadScheduler1_AppointmentCommand(object sender, AppointmentCommandEventArgs e)
    {
        if (e.CommandName == "Cancel")
            RadScheduler1.Rebind();
    }
    protected void RadScheduler1_FormCreating(object sender, SchedulerFormCreatingEventArgs e)
    {
        if (e.Mode == SchedulerFormMode.AdvancedEdit || e.Mode == SchedulerFormMode.AdvancedInsert)
        {
            IList<Resource> remainingResources = Session["remainingResources"] as List<Resource>;
            if (remainingResources != null)
            {
                foreach (Resource resource in remainingResources)
                {
                    RadScheduler1.Resources.Add(resource);
                }
                Session.Remove("remainingResources");
            }
        }
    }
In this article
HOW-TODESCRIPTIONSOLUTION
Not finding the help you need?
Contact Support