Sometimes we need to create a calendar control for displaying date into a
textbox or any other control. Here is a simple demo of about creating a calendar
control in asp.net.
For doing this activity we need to create a web page with the name Calendar.aspx
Following is the source code for the same.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Calendar.aspx.cs" Inherits="Calendar" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Eco
Friend & Co. - Time Tracker - Select Date</title>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1" />
<meta name="generator" content="Microsoft
Visual Studio, see http://msdn.microsoft.com/vstudio/" />
<meta name="Description" content="Select a date" />
<meta name="copyright" content="Copyright (c)
2011 Eco Friend & Company. All rights reserved." />
</head>
<body>
<form id="form1" runat="server">
<div id="calbg">
<div id="calcontent">
<fieldset>
<legend>SeleSelect
a date: </legend>
<asp:DropDownList ID="MonthSelect" runat="server" AutoPostBack="True" OnSelectedIndexChanged="MonthSelect_SelectedIndexChanged"></asp:DropDownList>
<asp:DropDownList ID="YearSelect" runat="server" AutoPostBack="True" OnSelectedIndexChanged="YearSelect_SelectedIndexChanged">
</asp:DropDownList>
<asp:Calendar ID="Cal" runat="server" ShowTitle="False" ShowNextPrevMonth="False"
DayNameFormat="FirstTwoLetters" FirstDayOfWeek="Sunday"
OnSelectionChanged="Cal_SelectionChanged">
<TodayDayStyle Font-Bold="True" ForeColor="White"
BackColor="#990000"></TodayDayStyle>
<DayStyle BorderWidth="2px" ForeColor="#666666" BorderStyle="Solid"
BorderColor="White"
BackColor="#EAEAEA"></DayStyle>
<DayHeaderStyle ForeColor="#649CBA"></DayHeaderStyle>
<SelectedDayStyle Font-Bold="True" ForeColor="#333333"
BackColor="#FAAD50"></SelectedDayStyle>
<WeekendDayStyle ForeColor="White"
BackColor="#BBBBBB"></WeekendDayStyle>
<OtherMonthDayStyle ForeColor="#666666"
BackColor="White"></OtherMonthDayStyle>
</asp:Calendar>
<br />
<table>
<tr>
<td valign="middle" colspan="2">
Date Selected:
<asp:Label ID="lblDate" runat="server">
</asp:Label>
<input id="datechosen" type="hidden" name="datechosen" runat="server">
</td>
</tr>
<tr>
<td valign="middle">
<asp:Button ID="OKButton" runat="server" Text="OK" />
</td>
<td valign="middle">
<asp:Button ID="CancelButton" runat="server" Text="Cancel" OnClientClick="javascript:self.close()"/>
</td>
</tr>
</table>
</fieldset>
</div>
</div>
</form>
</body>
</html>
Following is the source code of the Calendar.aspx.cs file
using
System;
using
System.Collections;
using
System.Configuration;
using
System.Data;
using
System.Linq;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.HtmlControls;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Xml.Linq;
public partial class Calendar : System.Web.UI.Page
{
public string
controlToEdit;
public string
isPostBack;
public Calendar()
{
LoadComplete += new EventHandler(Page_LoadComplete);
}
void Page_Load(object
sender, EventArgs e)
{
if (!Page.IsPostBack)
{
controlToEdit = Request.QueryString["controlID"];
Session.Add("controlToEdit", controlToEdit);
isPostBack = Request.QueryString["isPostBack"];
Session.Add("isPostBack", isPostBack);
// Cast first day of the week from web.config file.
Set it to the calendar
//Cal.FirstDayOfWeek
=
(System.Web.UI.WebControls.FirstDayOfWeek)Convert.ToInt32(ConfigurationManager.AppSettings["FirstDayOfWeek"]);
// Select the Correct date for Calendar from query
string
// If fails, pick the current date
on Calendar
try
{
Cal.SelectedDate = Cal.VisibleDate =
Convert.ToDateTime(lblDate.Text);
}
catch
{
Cal.SelectedDate = Cal.VisibleDate =
DateTime.Today;
}
// Fills in correct values for the
dropdown menus
FillCalendarChoices();
SelectCorrectValues();
}
else
{
if (Session["controlToEdit"]
!= null)
controlToEdit = (string)Session["controlToEdit"];
if (Session["isPostBack"]
!= null)
isPostBack = (string)Session["isPostBack"];
}
}
void Page_LoadComplete(object
sender, System.EventArgs e)
{
OKButton.OnClientClick = "javascript:window.opener.SetControlValue('"
+ this.controlToEdit +
"','" + lblDate.Text +
"','" + this.isPostBack
+ "');";
}
protected void FillCalendarChoices()
{
DateTime thisdate = (DateTime.Now).AddYears(5);
// Fills in month values
for (int
x = 0; x < 12; x++)
{
// Loops through 12 months of the year and
fills in each month value
ListItem li =
new ListItem(thisdate.ToString("MMMM"),
thisdate.Month.ToString());
MonthSelect.Items.Add(li);
//to add next next month name to the
monthselect drop downlist control like aug then sept and so on....
thisdate = thisdate.AddMonths(1);
}
// Fills in year values and change y value to
other years if necessary
for (int
y = 2000; y <= thisdate.Year; y++)
{
YearSelect.Items.Add(y.ToString());
}
}
protected void
SelectCorrectValues()
{
lblDate.Text = Cal.SelectedDate.ToShortDateString();
datechosen.Value =
lblDate.Text;
MonthSelect.SelectedIndex =
MonthSelect.Items.IndexOf(MonthSelect.Items.FindByValue(Cal.SelectedDate.Month.ToString()));
YearSelect.SelectedIndex =
YearSelect.Items.IndexOf(YearSelect.Items.FindByValue(Cal.SelectedDate.Year.ToString()));
}
protected void Cal_SelectionChanged(object
sender, System.EventArgs e)
{
Cal.VisibleDate = Cal.SelectedDate;
SelectCorrectValues();
}
protected void
MonthSelect_SelectedIndexChanged(object sender,
System.EventArgs e)
{
Cal.SelectedDate = Cal.VisibleDate
= new
DateTime(Convert.ToInt32(YearSelect.SelectedItem.Value),
Convert.ToInt32(MonthSelect.SelectedItem.Value),
1); ;
SelectCorrectValues();
}
protected void
YearSelect_SelectedIndexChanged(object sender,
System.EventArgs e)
{
Cal.SelectedDate = Cal.VisibleDate
= new
DateTime(Convert.ToInt32(YearSelect.SelectedItem.Value),
Convert.ToInt32(MonthSelect.SelectedItem.Value),
1); ;
SelectCorrectValues();
}
}
Till now we have created an aspx page and it depends how to open this webpage. I
prefer to open this web page as a popup therefore we will be creating a javascript
file with some methods in it.
Following is the source code for the same, save this file with script.js
extension
var
popUp;
function
SetControlValue(controlID, newDate, isPostBack)
{
popUp.close();
//document.forms[0]["textBox"].value=0;
//document.getElementById('<%=
textBox.ClientID%>').value=0;
document.forms[0][controlID].value=newDate;
// __doPostBack(controlID,'');
}
function
OpenPopupPage (pageUrl, controlID, isPostBack)
{
popUp=window.open(pageUrl+'?controlID='+controlID+'&isPostBack='+
isPostBack,'popupcal',
'width=250,height=330,left=200,top=250');
}
Now in order to test the
functionality we'll be creating a default.aspx page with one textbox control in
it. Following is the source code for the same.
<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled
Page</title>
<script type="text/javascript" src="javascript/script.js">
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtDate" runat="server"></asp:TextBox>
<a href="javascript:OpenPopupPage('Calendar.aspx','<%=
txtDate.ClientID %>','<%=
Page.IsPostBack %>');">
<img src="images/icon-calendar.gif" /></a>
</div>
</form>
</body>
</html>
Now just run the web application and click on the calendar icon you will see the
following output.



Now press the ok button. you'll see that the date is displayed in the textbox.
Hope you liked the example.