Click here to Skip to main content
12,623,295 members (29,532 online)
Click here to Skip to main content
Add your own
alternative version

Stats

2M views
18.6K downloads
367 bookmarked
Posted

Calendar DayView Control

, 20 Jun 2006 CPOL
Rate this:
Please Sign up or sign in to vote.
A calendar DayView control.

Introduction

This article describes creating a day view control for visualizing schedule functions in required applications. I have cloned the Outlook day view appearance for similar use. Here is a screenshot:

Office 12 Theme:

Sample Image

Office XP Theme:

Sample Image

Background

Before writing this control, I was in need of a day view control that just looks like that in Outlook. I have found some commercial toolkits but none of them meets my requirements. Some of those want that all appointments be given before showing the control, some of those are not open source, etc. So I wrote this control in a "hurry development", and I think other people can use it. Pay back time for using the CodeProject :)

What we have?

  • You can create your appointment class to hold special information (other than start, end dates and title).
  • You don't need to read all appointments from the DB or something like that.
  • You can specify how much days will be shown.
  • You can colorize appointments to show different views.
  • In-place editing.
  • Drag drop operations.
  • No Win32 API.
  • Theme based rendering.

By the way, it's compiled under the final release of .NET 2.0. If you don't have it, you need to recompile the project.

Using the code

This control uses a class named "Appointment" to visualize the view. The DayView control doesn't pay attention to saving appointments to the DB or fetching them. So, you need to write your own DB logic and answer the events.

The control implements these events to interact with the hosting application:

  • dayView1.NewAppointment
  • dayView1.ResolveAppointments
  • dayView1.SelectionChanged

The sample application uses a list collection as the container for appointments. You may use a cached DB source too.

NewAppointment event

This is raised when the user wants to create an appointment. Event arguments contain start date, end date, and title values of the new appointment. You can create your appointment class that inherits from the DayView.Appointment base class.

The sample application just creates a new appointment, and adds it to the list collection.

void dayView1_NewAppointment(object sender, NewAppointmentEventArgs args)
{
    Appointment m_Appointment = new Appointment();

    m_Appointment.StartDate = args.StartDate;
    m_Appointment.EndDate = args.EndDate;
    m_Appointment.Title = args.Title;

    m_Appointments.Add(m_Appointment);
}

ResolveAppointments event

This event is raised when the DayView control needs to show an appointment on a date. Event arguments contain the start date and end date of the required range of dates.

The sample application scans the list collection for a specified date range. You can fetch them from your own DB too.

private void dayView1_ResolveAppointments(object sender, 
                      ResolveAppointmentsEventArgs args)
{
    List<Appointment> m_Apps = new List<Appointment>();

    foreach (Appointment m_App in m_Appointments)
        if ((m_App.StartDate >= args.StartDate) && 
            (m_App.StartDate <= args.EndDate))
            m_Apps.Add(m_App);

    args.Appointments = m_Apps;
}

Selection Changed event

This event is raised when the user selects an appointment.

private void dayView1_SelectionChanged(object sender, EventArgs e)
{
    label3.Text = dayView1.SelectionStart.ToString() + 
                  ":" + dayView1.SelectionEnd.ToString();
}

The sample application shows the start date and the end date of the selected appointment in a label.

Points of interest

When I wrote this control, the hard part was sorting the appointments on screen without crossing over. The control internally uses an "AppointmentView" class to hold the state of appointments on screen. The rest of the code was drawing and isolating from the external application.

You may see some remarked codes about all-day events, but currently all-day events is not complete. When I finish it, I'll update this article. (Thanks to Claus Espersen for implementing the Office 12 theme and bug fixes.)

History

  • 14.07.2006
    • Bug fixes.
    • Start hour and start minute properties implemented.
    • Theme based rendering implemented.
    • AllowNew property implemented.
    • Mouse drag drop bugs fixed.
    • Internal changes for all day events.
    • Zoom feature implemented.
  • 11.09.2005
    • Initial release.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Ertan Tike
Web Developer
Turkey Turkey
No Biography provided

You may also be interested in...

Pro
Pro

Comments and Discussions

 
QuestionRemoving appointments Pin
Fabio Blardone30-Oct-16 5:49
memberFabio Blardone30-Oct-16 5:49 
AnswerCalendar dayview with Visual Studio 2015 (Windows Forms) Pin
aluizs17-Apr-16 19:22
memberaluizs17-Apr-16 19:22 
PraiseThanks Pin
Ranjan.D27-Mar-16 14:46
mvpRanjan.D27-Mar-16 14:46 
QuestionHorizontal Orientation Pin
shazwaz3-Dec-15 21:06
membershazwaz3-Dec-15 21:06 
Questiondelete appointment Pin
Member 1201672025-Nov-15 0:59
memberMember 1201672025-Nov-15 0:59 
QuestionAdding items - No entry appears - Drawing error Pin
Member 114515695-Aug-15 5:13
memberMember 114515695-Aug-15 5:13 
QuestionThis control has no midnight sector Pin
Giovanni S.30-Jul-15 9:59
memberGiovanni S.30-Jul-15 9:59 
QuestionAll-Day Event and Events Spanning Multiple Days? Pin
Member 1097564425-Sep-14 3:28
memberMember 1097564425-Sep-14 3:28 
QuestionCalendar shows same appointments every month Pin
pazzokli21-Mar-14 4:41
memberpazzokli21-Mar-14 4:41 
QuestionMerhaba Pin
Member 1047238618-Dec-13 6:42
memberMember 1047238618-Dec-13 6:42 
QuestionColumn fixed - show minutes Pin
Member 80596961-Oct-13 5:36
memberMember 80596961-Oct-13 5:36 
AnswerRe: Column fixed - show minutes Pin
rafaelchefe12-Jun-15 7:56
memberrafaelchefe12-Jun-15 7:56 
QuestionAppointment change Pin
neo11on23-Aug-13 23:17
memberneo11on23-Aug-13 23:17 
Questionretrieving data on Dayview control from ms access database Pin
naivngupta18-Aug-13 12:30
membernaivngupta18-Aug-13 12:30 
AnswerRe: retrieving data on Dayview control from ms access database Pin
neo11on23-Aug-13 23:14
memberneo11on23-Aug-13 23:14 
Questionday names in another language? Pin
Mohamed Medhat11-Aug-13 7:04
memberMohamed Medhat11-Aug-13 7:04 
Questioncompleted the task Pin
neo11on9-Aug-13 8:44
memberneo11on9-Aug-13 8:44 
GeneralNAO ENTENDO NADA C# Pin
h3nr1qu314-Jun-13 12:51
memberh3nr1qu314-Jun-13 12:51 
GeneralRe: NAO ENTENDO NADA C# Pin
Otter Banks10-Aug-13 5:03
memberOtter Banks10-Aug-13 5:03 
Questionexactly what i need Pin
ilyaskahya24-Mar-13 23:24
memberilyaskahya24-Mar-13 23:24 
QuestionLatest source code Pin
amnontopel11-Dec-12 1:56
memberamnontopel11-Dec-12 1:56 
GeneralMy vote of 4 Pin
Chelo19746-Sep-12 16:29
memberChelo19746-Sep-12 16:29 
QuestionVisual Basic for Visual Studio 2010 Pin
Paulnz12-Sep-12 11:31
memberPaulnz12-Sep-12 11:31 
Questionselecting bug Pin
somur-ruteeb14-Jun-12 15:35
membersomur-ruteeb14-Jun-12 15:35 
Questionproblem saving appointment Pin
remert698-Feb-12 22:05
memberremert698-Feb-12 22:05 

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.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.161128.1 | Last Updated 20 Jun 2006
Article Copyright 2005 by Ertan Tike
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid