Click here to Skip to main content
11,643,493 members (74,003 online)
Click here to Skip to main content

JSCalendar Custom Control for Visual Studio .NET

, 2 Oct 2005 CPOL 71.2K 1.9K 33
Rate this:
Please Sign up or sign in to vote.
Creating a custom control for JSCalendar.

Sample Image - jscalendar.jpg


JSCalendar is one of the powerful JavaScript calendars, you can download it from

JSCalendar can be used to add to date input fields a button that lets the user choose a date using a pop-up calendar. The control will allow you to add this calendar to your ASP.NET pages without configuring the JavaScript code.

How to use the control

  1. Download the file DLL.Zip
  2. Unzip the file to Calendar.dll
  3. Open Visual Studio .NET
  4. Right click on the toolbox then click Add/Remove Item
  5. From the Customize Tool Box window, click Browse, and select the DLL file (Calendar.Dll)
  6. The control will be added to your toolbox:
  7. Sample Image - jscalendar.jpg

  8. Create a new ASP.NET project, then drag and drop the calendar control to your form.
  9. From the Properties window you can set the path of the scripts file (the scripts file must be included in the same project and you can download it from
  10. Also you can specify the path of the calendar image and the format for date.

Setting up the scripts

Scripts files are downloadable from

  • Download the zip file for the calendar
  • Unzip the file to folder /JSCalendar in your application
  • In the properties of your control, type “/jscalendar”


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


About the Author

Hazem Torab
CEO Enozom Software
Egypt Egypt
Hazem Torab, founder & CEO at Enozom Software, a fast growing software company in Alexandria. Hazem has more than 6 years of experience in management and team leading, and 10+ years of professional experience in the software development field.

Hazem also is a co-founder and chairman of Ayaady for Investment and Agriculture, a crowd funded company and the first Egyptian online fresh meat shop directly from the farm to the consumers.

Before founding Enozom, Hazem was a co-founder & CEO of IRange Software. He also worked at ITWorx and Raya Software after his graduation in 2004 from Alexandria University, Faculty of Engineering, Computer and Systems Department.

You may also be interested in...

Comments and Discussions

QuestionHow to use in grid view rows Pin
soh_sid24-Aug-09 20:42
membersoh_sid24-Aug-09 20:42 
QuestionCan i use it for free? Pin
orhankemal20-Aug-07 4:23
memberorhankemal20-Aug-07 4:23 
AnswerRe: Can i use it for free? Pin
Hazem Torab23-Jan-08 9:00
memberHazem Torab23-Jan-08 9:00 
QuestionStack overflow error Pin
NyNiru27-Jun-07 6:28
memberNyNiru27-Jun-07 6:28 
Generalinput file validation(picture width and height should be less then 300 pixels.) Pin
jayvaishnav8216-Mar-07 19:54
memberjayvaishnav8216-Mar-07 19:54 
QuestionHow to Make Scedular using JSCalander Pin
Member #345857016-Mar-07 19:44
memberMember #345857016-Mar-07 19:44 
GeneralModification to Use Embedded Resources Pin
OtisAardvark4-Jan-07 4:18
memberOtisAardvark4-Jan-07 4:18 
QuestionHow to call a post back [modified] Pin
Tristy9-Aug-06 11:07
memberTristy9-Aug-06 11:07 
GeneralJSCalendar Custom Control and Atlas Pin
quocvuong20052-Jul-06 17:27
memberquocvuong20052-Jul-06 17:27 
GeneralRe: JSCalendar Custom Control and Atlas Pin
jcm123426-Apr-07 1:12
memberjcm123426-Apr-07 1:12 
QuestionHow to add design time support Pin
fpw23771-Jul-06 12:06
memberfpw23771-Jul-06 12:06 
AnswerRe: How to add design time support Pin
Tristy3-Aug-06 8:23
memberTristy3-Aug-06 8:23 
AnswerRe: How to add design time support Pin
xsoftdev15-Jun-07 8:09
memberxsoftdev15-Jun-07 8:09 
GeneralProblems with display on design surface Pin
braditude20-Jun-06 23:01
memberbraditude20-Jun-06 23:01 
GeneralLittle Tweaks and VB.NET Source Code Pin
TrickUK14-May-06 22:43
memberTrickUK14-May-06 22:43 
Hi Hazem,

Nice work, saved me some time.   I've converted your source code to VB.NET (see below) and added a couple of tweaks.   I prefer to use System.IO.StringWriter when concatenating strings as the code looks less cluttered and easier to debug IMO (also means you don't need to be using the VisualBasic namespace when coding C# Smile | :) )

The only other notable alteration is when setting the ScriptPath property, where I simply added a check to ensure there's a trailing slash so the tags are rendered properly.   Caught me out on the first execution Wink | ;) .

Anyway, here goes;

Imports System.IO
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.ComponentModel

<DefaultProperty("Value"), ToolboxData("<{0}:calendarselect runat=server></{0}:calendarselect>")> _
Public Class CalendarSelect
      Inherits System.Web.UI.WebControls.TextBox

      Public Event Change As EventHandler

      Private myImageURL As String = String.Empty
      Private myScriptsPath As String = String.Empty
      Private myDateFormat As String = "dd/MM/yyyy"
      Private myTheme As String = "calendar-Blue"
      Private myLanguage As String = "en"
      Private imgCalendar As New Image

#Region " Property Declarations "
      <Bindable(True), Category("Appearance"), DefaultValue("en")> _
      Public Property Language() As String
                  Return myLanguage
            End Get
            Set(ByVal Value As String)
                  myLanguage = Value
            End Set
      End Property

      <Bindable(True), Category("Appearance"), DefaultValue("calendar-Blue")> _
      Public Property Theme() As String
                  Return myTheme
            End Get
            Set(ByVal Value As String)
                  myTheme = Value
            End Set
      End Property

      <Bindable(True), Category("Appearance"), DefaultValue("dd/MM/yyyy")> _
      Public Property DateFormat() As String
                  Return myDateFormat
            End Get
            Set(ByVal Value As String)
                  myDateFormat = Value
            End Set
      End Property

      <Bindable(True), Category("Appearance"), DefaultValue("")> _
      Public Property ScriptsBasePath() As String
                  Return myScriptsPath
            End Get
            Set(ByVal Value As String)
                  myScriptsPath = Value
                  If Not myScriptsPath.EndsWith("/") Then myScriptsPath &= "/"
            End Set
      End Property

      <Bindable(True), Category("Appearance"), DefaultValue("")> _
      Public Property ImageURL() As String
                  Return myImageURL
            End Get
            Set(ByVal Value As String)
                  myImageURL = Value
            End Set
      End Property
#End Region

      Protected Overloads Overrides Sub Render(ByVal output As HtmlTextWriter)
            Dim _page As Page = CType(System.Web.HttpContext.Current.Handler, Page)

            If Not _page.IsClientScriptBlockRegistered("Calendar") Then
                  With New StringWriter
                        .WriteLine("<link title=""" & myTheme & """ media=""all"" href=""" & myScriptsPath & myTheme & ".css"" type=""text/css"" rel=""stylesheet"">")
                        .WriteLine("<script src=""" & myScriptsPath & "calendar.js"" type=""text/javascript""></script>")
                        .WriteLine("<script src=""" & myScriptsPath & "lang/calendar-" & myLanguage & ".js"" type=""text/javascript""></script>")
                        .WriteLine("<script src=""" & myScriptsPath & "calendar-setup.js"" type=""text/javascript""></script>")
                        .WriteLine("<script> var today = new Date(); </script> ")
                        _page.RegisterClientScriptBlock("Calendar", .ToString)
                  End With
            End If
            output.Write("&nbsp;<img src=""" + myImageURL + """ id=""" + Me.ClientID + "img"" border=""0"" style=""cursor:hand"" align=""absmiddle"">")

            With New StringWriter
                  .WriteLine("inputField : '" + Me.ClientID + "', ")
                  .WriteLine("ifFormat : '" + ConvertToJSDateFormate(myDateFormat) + "', ")
                  .WriteLine("button : '" + Me.ClientID + "img', ")
                  .WriteLine("align : 'B1', ")
                  .WriteLine("singleClick : true, ")
                  .WriteLine("dateStatusFunc : function (date) {")
                  .WriteLine("return false;")
            End With
      End Sub

      Private Function ConvertToJSDateFormate(ByVal f As String) As String
            f = f.Replace("dd", "%d")
            f = f.Replace("MM", "%m")
            f = f.Replace("yyyy", "%Y")
            Return f
      End Function

      Protected Overloads Overrides Sub CreateChildControls()
            imgCalendar.ImageUrl = myImageURL
            imgCalendar.ID = "img" + Me.ID
            imgCalendar.EnableViewState = True
      End Sub

      Public Sub RaisePostDataChangedEvent()
      End Sub

      Public Overridable Sub OnChange(ByVal e As EventArgs)
            RaiseEvent Change(Me, e)
      End Sub
End Class

HTH, Trick.
GeneralError Creation Control Pin
Asif solkar11-Jan-06 8:54
memberAsif solkar11-Jan-06 8:54 
Questionstand-alone control Pin
genxer28-Dec-05 12:15
membergenxer28-Dec-05 12:15 
AnswerRe: stand-alone control Pin
Hazem Torab29-Dec-05 10:17
memberHazem Torab29-Dec-05 10:17 
GeneralRe: stand-alone control Pin
genxer5-Jan-06 5:36
membergenxer5-Jan-06 5:36 
Questionsetting javascipt path Pin
Prabakar Devarajan21-Sep-05 22:29
memberPrabakar Devarajan21-Sep-05 22:29 
AnswerRe: setting javascipt path Pin
Hazem Torab2-Oct-05 0:13
memberHazem Torab2-Oct-05 0:13 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    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
Web03 | 2.8.150731.1 | Last Updated 2 Oct 2005
Article Copyright 2005 by Hazem Torab
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid