Click here to Skip to main content
13,256,716 members (51,769 online)
Click here to Skip to main content
Add your own
alternative version


284 bookmarked
Posted 15 May 2006

Using DayPilot (Outlook-Like Calendar/Scheduling Control for ASP.NET)

, 30 Mar 2015
Rate this:
Please Sign up or sign in to vote.
Showing the features of a flexible ASP.NET event calendar/scheduling control.

Event Calendar Day View

AJAX Event Calendar Day View

Event Calendar Week View

HTML5 Event Calendar Week View

ASP.NET Scheduler

DayPilot includes a Scheduler control that allows you to display events for multiple resources.


DayPilot includes a Gantt control that displays one task per row on a horizontal time axis.

Event Calendar Features 

DayPilot is an Outlook-like open-source event calendar/scheduling control:

Getting Started  

The only required step to make DayPilot working is to bind it to a data source. It supports DataTable (and DataSet) as a data source so you can easily load the events from your database.

Let's have a following table:

ID  Name  Start  End
Lunch 2014-06-01 12:00:00  2014-06-01 12:30:00
Dinner 2014-06-01 19:00:00  2014-06-01 21:00:00 
Sleep 2014-06-01 22:00:00  2014-06-02 07:00:00
4 Breakfast  2014-06-02 07:30:00 2014-06-02 08:30:00

In order to show the events in DayPilot calendar you have to do the following steps:

  1. Place the DayPilot control on a WebForm.
  2. Set the DataSource property.
  3. Set column name properties.
  4. Select the days that will be shown.
  5. Call DataBind(). 

Setting the DataSource property

After loading a DataTable from a database (or other source) you should assign it to the DayPilotCalendar.DataSource property:

DayPilotCalendar1.DataSource = MyDataTable;

In our example we are building the DataTable by hand:

DataTable dt;
dt= new DataTable();
dt.Columns.Add("start", typeof(DateTime));
dt.Columns.Add("end", typeof(DateTime));
dt.Columns.Add("name", typeof(string));
dt.Columns.Add("id", typeof(string));
DataRow dr;

dr = dt.NewRow();
dr["id"] = 0;
dr["start"] = Convert.ToDateTime("15:30").AddDays(1);
dr["end"] = Convert.ToDateTime("16:30").AddDays(1);
dr["name"] = "Partner conf. call";

// ...

return dt;

When loading the events from a database I recommend limiting the SELECT so only the necessary events are loaded (not all events from the table). DayPilot will work properly in both cases (it only select the relevant events) but all the events will have to be loaded and they will be stored in the ViewState.

Setting column name properties

You need to indicate which columns contain the necessary data:

DayPilotCalendar1.DataStartField = "Start";
DayPilotCalendar1.DataEndField = "End";
DayPilotCalendar1.DataTextField = "Name";
DayPilotCalendar1.DataValueField = "ID";

Setting the visible dates

Let's say we want to show just a single day:

DayPilotCalendar1.StartDate = Convert.ToDateTime("1 June 2012"); 
DayPilotCalendar1.Days = 1; // default (not necessary) 

But we can show multiple days as well. This is a new feature of DayPilot 2.0.

DayPilotCalendar1.StartDate = Convert.ToDateTime("1 June 2012"); 
DayPilotCalendar1.Days = 5;


HTML5 Event Calendar Work Week View

Data binding 

Bind the data in the Page_Load() method:

if (!IsPostBack)

Data-Related Calendar Properties Overview

Here are the data-related properties of DayPilotCalendar:

Source of event data  (DataSource or DataTable).

Name of the data source column that contains the event start date and time (string). 

Name of the data source column that contains the event end date and time (string).  

Name of the data source column that contains the event name (string).

The Id will be passed to the event handling code when clicking on the event (string). 

The first date that should be shown by the calendar (DateTime, the default value is DateTime.Today). 

The number of days that should be rendered (int, the default value is 1).  

Integration with System.Web.UI.WebControls.Calendar

For switching the date you can use the standard .NET Framework control System.Web.UI.WebControls.Calendar. You can use the PostBack event to change the DayPilot StartDate and EndDate.

In our sample we will use the DayRender event to improve the calendar: 

  • the days will become links to a specific day (i.e. no PostBack)
  • the days that contain an event will be bold
private void Calendar1_DayRender(object sender, System.Web.UI.WebControls.DayRenderEventArgs e)
    string fontWeight = "normal";
    if (isThereEvent(e.Day.Date))
        fontWeight = "bold";

    string color = "black";
    if (e.Day.IsOtherMonth)
        color = this.Calendar1.OtherMonthDayStyle.ForeColor.Name;

    e.Cell.Text = String.Format("<a href='Default.aspx?day={0:d}' style='color: " 
        + color + ";text-decoration:none; font-weight:" 
        + fontWeight + "'>{1}</a>", e.Day.Date, e.Day.Date.Day);        

The method isThereEvent() returns true if a specific day contains any event. This method will be specific to your application. You can go through the data returned from the database (and supplied to DayPilotCalendar.DataSource) to avoid another database request. We are not using the database in our sample so it is hard-coded:

private bool isThereEvent(DateTime date)
    DateTime today = DateTime.Now;
    DateTime tomorrow = today.AddDays(1);
    DateTime anotherDay = today.AddDays(3);

    // there are events today
    if ((date.DayOfYear == today.DayOfYear) && (date.Year == today.Year))
        return true;

    // there are events tomorrow
    if ((date.DayOfYear == tomorrow.DayOfYear) && (date.Year == tomorrow.Year))
        return true;

    // there are events on another day
    if ((date.DayOfYear == anotherDay.DayOfYear) && (date.Year == anotherDay.Year))
        return true;

    return false;


Integration using UpdatePanel

Since version 2.3 DayPilot can be used inside UpdatePanel (ASP.NET AJAX Extensions/.NET Framework 3.5). If you place both the Calendar (System.Web.UI.WebControls.Calendar) and DayPilotCalendar inside the same UpdatePanel you can switch the date using Calendar.SelectionChanged event handler. It can be used like a regular PostBack event:

protected void Calendar1_SelectionChanged(object sender, EventArgs e)
    DayPilotCalendar1.StartDate = Calendar1.SelectedDate;

Event Calendar Appearance

There are many options to change the default appearance: 

Cell height in pixels (int, the default value is 20). Minimum height is 15. 

Width of the hour name in pixels (int, the default value is 40). 

Hour when the business hours start (int, the default value is 9). 

Hour when the business hours end (int, the default value is 18). 

Determines the visible hour range (HeightSpecEnum, the default value is BusinessHoursNoScroll). 

Determines whether the hour names column should be visible (bool, the default value is true). 

The time format - 12-hours cycle (3 PM) or 24-hours cycle (15:00). 

Width of the control (string, the default value is "100%"). 

Calendar CSS Theme Examples 

You can create your own CSS theme using the online theme designer []. 

Green CSS Theme 

White CSS Theme 

Transparent CSS Theme 

Handling User Actions

There are two types of user actions: 

  • clicking a free time (you will typically use this action to create a new event)
  • clicking an event (you will typically use this action to show event details)

The actions can be handled on the client (by custom JavaScript code) or on the server (by handling the server event). 

Handling of a mouse click on a calendar event (Disabled, JavaScript, or PostBack).  

Handling of a mouse click on a free-time slot  (Disabled, JavaScript, or PostBack).   

JavaScript code that should be executed when the user clicks on a calendar event (provided that EventClickHandling is set to JavaScript). The string "{0}" will be replaced with an event ID. 

JavaScript code that should be executed when the user clicks on a free-time slot (provided that FreetimeClickHandling is set to JavaScript). The string "{0}" will be replaced with the date and time specified in the standard format produced by DateTime.ToString("s") - e.g. "2014-05-15T07:00:00". 

Server-side event handling 

Occurs when the user clicks on an event and EventClickHandling property is set to PostBack.  

Occurs when the user clicks on an event and TimeRangeSelectedHandling property is set to PostBack.   

Your server-side event handling methods will get the important data:

EventClick Example 

The id of the event can be read using e.Value. 

private void DayPilotCalendar1_EventClick(object sender, EventClickEventArgs e)
    Label1.Text = "Selected event: " + e.Value;

FreeTimeClick Example 

The start of the clicked time cell can be read using e.Start. 

private void DayPilotCalendar1_TimeRangeSelected(object sender, TimeRangeSelectedEventArgs e)
    Label1.Text = "Selected time: " + e.Start;


DayPilot for JavaScript

DayPilot has a special client-side only version that can be used with any kind of backend (PHP, Ruby, Node.js):

DayPilot for ASP.NET MVC

DayPilot has a special version that includes ASP.NET MVC bindings (server-side):



This article, along with any associated source code and files, is licensed under The Apache License, Version 2.0


About the Author

Dan Letecky
Czech Republic Czech Republic

You may also be interested in...


Comments and Discussions

GeneralRe: My vote of 5 Pin
Dan Letecky11-Jun-12 22:47
memberDan Letecky11-Jun-12 22:47 
NewsSource code available online Pin
Gilad Khen30-May-09 17:40
memberGilad Khen30-May-09 17:40 
GeneralRe: Source code available online Pin
adriancs2-Jun-14 22:02
professionaladriancs2-Jun-14 22:02 
GeneralEnable a Specific cell as a Free Time and Disable other cells who are not Pin
Hassan Akhtar Ali16-Nov-08 20:41
memberHassan Akhtar Ali16-Nov-08 20:41 
Hello hope u all having a good time, well
i have a sinceario of implementing a webschedular
the requirment is i have 3 tables

Tutor Working hours(Master)
PK_ID TutorID CourseID StartingDateID

This is table is meant by
A teacher can teach a course on a specific starting date marked by the univ

DetailTutorWorking Hours (Detail)
PK_ID FK_ID(PK_ID) StartTime EndTime DayofWeek
This is the detail table where a tutor can mark its free working hourse now like if i can say :

David(TutorID) teaches CCNA(COurseID) that starts on 3 Nov(StartingDateID)
and he marks his available time on 12:00pm(start time) to 1:00pm(end time) on monday and tuesday

now within this interval the student is available and can mark his appointment if the working hour is free he can save his appointment, if it is taken by some one else it is un editable, if it is already his saved then he can edit it, please suggest me what can i do to achieve this, please help me saving my job as i m in very much big depression now days i shall be very very gratefull to you,, regards

Hassan Akhtar

GeneralAwesome Pin
merlin98119-May-08 12:49
membermerlin98119-May-08 12:49 
QuestionEvent spanning on more than a day ? Pin
cardigait6-Jun-07 4:43
membercardigait6-Jun-07 4:43 
AnswerRe: Event spanning on more than a day ? Pin
Dan Letecky6-Jun-07 4:56
memberDan Letecky6-Jun-07 4:56 
QuestionJust reviewed the daypilot Pin
ambshah4-May-07 4:32
memberambshah4-May-07 4:32 
AnswerRe: Just reviewed the daypilot Pin
Dan Letecky11-May-07 5:21
memberDan Letecky11-May-07 5:21 
QuestionDates on X Axis and Tasks on Y Axis Pin
rk3320-Jan-07 10:12
memberrk3320-Jan-07 10:12 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.171114.1 | Last Updated 30 Mar 2015
Article Copyright 2006 by Dan Letecky
Everything else Copyright © CodeProject, 1999-2017
Layout: fixed | fluid