This tutorial shows how to use DayPilot ASP.NET Calendar in a web application. It includes both C# and VB.NET version.
License
Licensed for testing and evaluation purposes. You can use the source code of the tutorial if you are a licensed user of DayPilot Pro for ASP.NET WebForms.
Features
It is a minimalistic version:
One web page
Week view calendar
Connected to an SQLite database
Event moving enabled (drag&drop)
Single user
Installation
[Optional] You can add the DayPilot controls to the Visual Studio Toolbox:
Web Site
Create a new web site in Visual Studio.
Create a Bin directory in the web site and copy DayPilot.dll there.
Web Form (Page)
Add a new page to the site (Default.aspx).
Adding the Calendar Control

Add the following line to Default.aspx, right below <%@ Page ... %> line:
<%@ Register Assembly="DayPilot" Namespace="DayPilot.Web.Ui" TagPrefix="DayPilot" %>Copy the following snippet to the page (inside <form> element):
C#
<daypilot:daypilotcalendar
id="DayPilotCalendar1"
runat="server"
DataStartField="eventstart"
DataEndField="eventend"
DataTextField="name"
DataValueField="id"
Days="7"
OnEventMove="DayPilotCalendar1_EventMove"
EventMoveHandling="CallBack"
>
</daypilot:daypilotcalendar>VB.NET
<daypilot:daypilotcalendar
id="DayPilotCalendar1"
runat="server"
DataStartField="eventstart"
DataEndField="eventend"
DataTextField="name"
DataValueField="id"
Days="7"
EventMoveHandling="CallBack"
>
</daypilot:daypilotcalendar>The following attributes are required by ASP.NET:
id
runat
The following attributes are required by DayPilot:
DataStartField - specifies the data source column that contains event start (DateTime)
DataEndField - specifies the data source column that contains event end (DateTime)
DataTextField - specifies the data soruce column that contains event text (string)
DataValueField - specifies the data source column that contains event id (string or integer)
We define a few additional attributes:
Days - specifies the number of days (visible as calendar columns)
EventMoveHandling - enables event moving (the action will be handled by an AJAX callback)
For C# we also define a EventMove event handler here (in VB.NET it's defined using Handles clause in the Default.aspx.vb):
OnEventMove
Adding the Functionality
The code behind file (Default.aspx.cs or Default.aspx.vb) must contain two event handlers:
Page_Load
DayPilotCalendar1_EventMove
Page_Load
We will load events from the DB to the Calendar during the initial web page load.
C#
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DayPilotCalendar1.StartDate = DayPilot.Utils.Week.FirstDayOfWeek(new DateTime(2009, 1, 1));
DayPilotCalendar1.DataSource = dbGetEvents(DayPilotCalendar1.StartDate, DayPilotCalendar1.Days);
DataBind();
}
}VB.NET
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If (Not IsPostBack) Then
DayPilotCalendar1.StartDate = DayPilot.Utils.Week.FirstDayOfWeek(New DateTime(2009, 1, 1))
DayPilotCalendar1.DataSource = dbGetEvents(DayPilotCalendar1.StartDate, DayPilotCalendar1.Days)
DataBind()
End If
End SubDayPilotCalendar1_EventMove
We will update the DB to actually move an event and send an updated event set back to the client.
C#
protected void DayPilotCalendar1_EventMove(object sender, DayPilot.Web.Ui.Events.EventMoveEventArgs e)
{
dbUpdateEvent(e.Value, e.NewStart, e.NewEnd);
DayPilotCalendar1.DataSource = dbGetEvents(DayPilotCalendar1.StartDate, DayPilotCalendar1.Days);
DayPilotCalendar1.DataBind();
DayPilotCalendar1.Update();
}VB.NET
Protected Sub DayPilotCalendar1_EventMove(ByVal sender As Object, ByVal e As DayPilot.Web.Ui.Events.EventMoveEventArgs) Handles DayPilotCalendar1.EventMove
dbUpdateEvent(e.Value, e.NewStart, e.NewEnd)
DayPilotCalendar1.DataSource = dbGetEvents(DayPilotCalendar1.StartDate, DayPilotCalendar1.Days)
DayPilotCalendar1.DataBind()
DayPilotCalendar1.Update()
End SubDatabase
In this tutorial, we are using SQLite embedded database and SQLite ADO.NET Provider to limit the external dependencies (both the ADO.NET driver and the database engine are in a single file - System.Data.SQLite.DLL - in Bin directory).
The database file (daypilot.sqlite) can be found in App_Data directory. The database structure can be examined using SQLite Administrator.

The database contains a single table with the following structure:
CREATE TABLE event (
id VARCHAR(50),
name VARCHAR(50),
eventstart DATETIME,
eventend DATETIME
);Loading events
C#
private DataTable dbGetEvents(DateTime start, int days)
{
SQLiteDataAdapter da = new SQLiteDataAdapter("SELECT [id], [name], [eventstart], [eventend] FROM [event] WHERE NOT (([eventend] <= @start) OR ([eventstart] >= @end))", ConfigurationManager.ConnectionStrings["db"].ConnectionString);
da.SelectCommand.Parameters.AddWithValue("start", start);
da.SelectCommand.Parameters.AddWithValue("end", start.AddDays(days));
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}VB.NET
Private Function dbGetEvents(ByVal start As DateTime, ByVal days As Integer) As DataTable
Dim da As New Data.SQLite.SQLiteDataAdapter("SELECT [id], [name], [eventstart], [eventend] FROM [event] WHERE NOT (([eventend] <= @start) OR ([eventstart] >= @end))", ConfigurationManager.ConnectionStrings("db").ConnectionString)
da.SelectCommand.Parameters.AddWithValue("start", start)
da.SelectCommand.Parameters.AddWithValue("end", start.AddDays(days))
Dim dt As New DataTable()
da.Fill(dt)
Return dt
End FunctionUpdating an event
C#
private void dbUpdateEvent(string id, DateTime start, DateTime end)
{
using (SQLiteConnection con = new SQLiteConnection(ConfigurationManager.ConnectionStrings["db"].ConnectionString))
{
con.Open();
SQLiteCommand cmd = new SQLiteCommand("UPDATE [event] SET [eventstart] = @start, [eventend] = @end WHERE [id] = @id", con);
cmd.Parameters.AddWithValue("id", id);
cmd.Parameters.AddWithValue("start", start);
cmd.Parameters.AddWithValue("end", end);
cmd.ExecuteNonQuery();
}
}VB.NET
Private Sub dbUpdateEvent(ByVal id As String, ByVal start As DateTime, ByVal [end] As DateTime)
Using con As New Data.SQLite.SQLiteConnection(ConfigurationManager.ConnectionStrings("db").ConnectionString)
con.Open()
Dim cmd As New Data.SQLite.SQLiteCommand("UPDATE [event] SET [eventstart] = @start, [eventend] = @end WHERE [id] = @id", con)
cmd.Parameters.AddWithValue("id", id)
cmd.Parameters.AddWithValue("start", start)
cmd.Parameters.AddWithValue("end", [end])
cmd.ExecuteNonQuery()
End Using
End Sub
DayPilot