A couple of quick fixes to the AjaxControlToolkit CalendarExtender

The AjaxControlToolkit CalendarExtender is one of the more usable and useful controls in the kit. However there are a couple of things you might want to do to it in order to increase it's usefulness:

First, the default behavior is to hide the calendar when the textbox you're extending loses focus. This might be ok for some people, but I wanted it to disappear when a date was selected. Simply add a hideCalendar function, which you can either do in static JavaScript or via RegisterClientScript block depending on your application:

Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "hideCalendar", @"function hideCalendar(cb) { cb.hide(); }", true);

Then update the OnclientDateSelectionChanged property of your extender:

<cc1:CalendarExtender ID="CalendarExtender1" runat="server" TargetControlID="txtDate" OnClientDateSelectionChanged='hideCalendar' ></cc1:CalendarExtender>

Next, I found the current version of the toolkit (latest at time of writing) has a small bug, in that it disables tabbing out of the text field when the extender lives inside a GridView. A while back this was a bug inside forms as well, but they fixed that, however it's still an issue for GridViews - and of course, that's exactly where my extender lived. This one required making a quick change to the CalendarBehaviour.js file - you'll need to have downloaded the source for the control toolkit in order to do this.

First, add a new delegate (in bold) to handle the onkeydown event: this._element$delegates = {
focus : Function.createDelegate(this, this._element_onfocus),
keydown : Function.createDelegate(this, this._element_onkeydown),
focusout : Function.createDelegate(this, this._element_onblur),
blur : Function.createDelegate(this, this._element_onblur),
change : Function.createDelegate(this, this._element_onchange),
}

Now, implement it: _element_onkeydown : function(e) {
if (e.keyCode == 9 && this._isOpen)
{
this.hide();
}
}, 

For me the extender was just too annoying without these changes. With them, it's a pretty nice functional piece of JavaScript.

Technorati tags: ,

 Print | Posted on Monday, August 06, 2007 9:39 PM | Filed Under [ ASP.NET AJAX Web Development ]



Feedback

Gravatar

# re: A couple of quick fixes to the AjaxControlToolkit CalendarExtender

Very nice and sleek solution. Great work!

Thanx a lot!!

9/16/2008 1:22 PM | Manoj

Gravatar

# re: A couple of quick fixes to the AjaxControlToolkit CalendarExtender

Hi,

I'm coding in Visual Basic
How and where do I implement the:

Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "hideCalendar", @"function hideCalendar(cb) { cb.hide(); }", true);



5/30/2009 11:50 AM | Monty

Gravatar

# re: A couple of quick fixes to the AjaxControlToolkit CalendarExtender

Nice post,

I think on load would be a great idea if not chack it for init and it will probabaly work

Thanks for bringing this up

8/14/2009 5:00 AM | Web developer


Post Comment

Title  
Name  
Email
Website / Url
 

Your comment

   
Ensure the word in this box says 'orange':
 
Please add 1 and 5 and type the answer here:





Due to excessive comment spam, all comments are now being moderated. If you're a comment spammer then you're wasting your time here. Your comments will not be published - ever.


About me

My name is Ross Hawkins and I'm a developer, consultant, business owner and writer based in Auckland, New Zealand (pictured below!). My current work revolves around ASP.NET, C#, jQuery, Ajax, SQL Server, and a mix of other Microsoft development technologies.

I also have about 15 years of experience with IBM Lotus Notes/Domino and associated technologies. While Notes/Domino is no longer my primary focus I still like to dabble and keep my skills up to date.

I own and run 2 businesses - Hawkins Consulting Services, and Ignition Development.

Bethells Beach, located in sunny West Auckland, New Zealand




Subscribe

Subscribe to this feed


Search




Popular Content

Troubleshooting WebResource.axd

The .NET 2.0 framework changed the way clientside JavaScript is delivered to the browser. Previously, ASP.NET 1.1 used the aspnet_client directory whereas now 2.0 uses WebResource.axd.

Published on October 8, 2006

Microsoft AJAX Extensions: Sys.Debug is null or not an object

One of the breaking changes which was made with the 1.0 release of the Microsoft Ajax Extensions was the renaming of the 'Debug' class to 'Sys.Debug' for reasons of compatiability with other frameworks. Breaking changes like this can often be a source of frustration..

Published on May 22, 2007

Simple ASP.NET Character Counter

A textbox character counter is a pretty simple piece of functionality, and there's a lot of different ways to apply one to your application. The following method is nice and simple, and can be done using only clientside JavaScript if required, or combined with server side code in order to create a more dynamic effect

Published on December 4, 2006

Simple ASP.NET Character Counter - with Master Page Support

A quick update to my previous character counter article adding some changes for those using it with Master Pages.

Published on February 7th, 2009

Adding Tooltips to Gridview Headers

As the title says, this is a very simple but dynamic way of achieving tooltip text on a header column. It's not overly flash, but it's lightweight and quick to implement.

Published on April 15, 2007

SQL Server Web Report Viewer Issues on Windows 2008 Server/IIS7

A fix for another AXD related issue, this time with the SQL Server Web Report Viewer Control which was being served up via IIS7 on a Windows 2008 server.

Published on June 2, 2007
Updated on April 10, 2008




Archives

January, 2012 (3)
December, 2011 (3)
November, 2011 (8)
October, 2011 (9)
September, 2011 (8)
August, 2011 (5)
July, 2011 (4)
June, 2011 (7)
May, 2011 (5)
April, 2011 (3)
March, 2011 (8)
February, 2011 (4)
January, 2011 (3)
December, 2010 (8)
November, 2010 (5)
October, 2010 (6)
September, 2010 (7)
August, 2010 (11)
July, 2010 (12)
June, 2010 (8)
May, 2010 (8)
April, 2010 (4)
March, 2010 (8)
February, 2010 (6)
January, 2010 (12)
December, 2009 (13)
November, 2009 (11)
October, 2009 (12)
September, 2009 (12)
August, 2009 (2)
July, 2009 (7)
June, 2009 (12)
May, 2009 (9)
April, 2009 (9)
March, 2009 (9)
February, 2009 (8)
January, 2009 (7)
December, 2008 (6)
November, 2008 (7)
October, 2008 (9)
September, 2008 (12)
August, 2008 (9)
July, 2008 (6)
June, 2008 (24)
May, 2008 (13)
April, 2008 (16)
March, 2008 (8)
February, 2008 (10)
January, 2008 (1)
December, 2007 (14)
November, 2007 (11)
October, 2007 (11)
September, 2007 (13)
August, 2007 (11)
July, 2007 (5)
June, 2007 (15)
May, 2007 (11)
April, 2007 (9)
March, 2007 (9)
February, 2007 (10)
January, 2007 (8)
December, 2006 (18)
November, 2006 (11)
October, 2006 (14)
September, 2006 (9)
August, 2006 (10)
July, 2006 (4)
June, 2006 (4)
May, 2006 (6)
April, 2006 (3)
February, 2006 (6)
January, 2006 (10)
September, 2005 (2)
August, 2005 (4)

Post Categories

ASP.NET
AJAX
Amusing
NZ
NZ Trains
Notes/Domino
Visual Studio
Web Development
Miscellaneous
Me
Rugby
C#
SQL