Dear visitor, thanks for stopping by! If you want, you can follow all updates on Snowball.be via RSS. You can also follow me on Twitter or Facebook. More interesting posts from other Microsoft Regional Directors can be found at The Region.
Gill Cleeren     .net | ASP.net     April 5, 2007    

A few days ago, a collegue asked me how it was possible to add tooltips to a gridview's header. This property is not present on the gridview by default.

A few solutions came to mind. The first solution I thought of consisted of adding attributes to the cells. However, this seemed not to work.
My second solution consisted of a client-side solution. Since I've been creating Vista Sidebar Gadgets, I've solved several problems with Javascript, and this one too seemed candidate to be solved with it.

In this sample, I will explain how I added tooltips to the ASP.net 2.0 gridview header.

First, we'll do some preparing work.
Let's add a simple gridview to the page. I created a small database, and simply dragged a table from the server explorer into the Visual Studio designer.

This gave me a simple gridview as can be seen on the figure on the left. What do you think about the great layout ;-) ?

So far, not so exciting!

 

 

 


Creating script from code-behind
We'll use an javascript array of strings, that we create in the code-behind. This makes it possible to have the tooltips multilangual, which is often a requirement (in my case, it was).

In the following code, I'll make use of the ClientScriptManager class and RegisterStartupScript method. The script added by the RegisterStartupScript method executes when the page finishes loading but before the page's OnLoad event is raised (from MSDN Library).

private void AddTooltipToGridHeaders() { ClientScriptManager cs = Page.ClientScript; String csname = "ConcatScript"; Type cstype = this.GetType(); if (!cs.IsStartupScriptRegistered(cstype, csname)) { System.Text.StringBuilder cstext = new System.Text.StringBuilder(); //build client script from code-behind cstext.Append("<script type=\"text/javascript\">"); //this values can be added or translated string arrValue = "\"" + "CustomerId" + "\"," + "\"" + "Firstname" + "\"," + "\"" + "Lastname" + "\"," + "\"" + "Street" + "\"," + "\"" + "Number" + "\"," + "\"" + "ZIP" + "\"," + "\"" + "City" + "\"" ; //create array of the values cstext.Append("var ToolTips = new Array(" + arrValue + ");"); //call the javascript method defined in the aspx cstext.Append("gvAddToolTips(document.getElementById('" + GridView1.ClientID + "'), ToolTips);"); cstext.Append("</script>"); //register the script when the page finishes loading cs.RegisterStartupScript(cstype, csname, cstext.ToString(), false); } }


 Using the array in client side script

The following function is added to the HTML/ASPX code. In this function, I first test if the TBODY tag is present, I use the firstChild method to retrieve the header row. If it isn't, I use the nextSibling method.

In the for-loop, I loop through the cells of this row (headerRow.children) and set the title to the corresponding value of the array. The array is available from the code above.

<script type="text/javascript"> function gvAddToolTips(gv, colTooltips) { var tableBody = null; if(gv.firstChild.tagName == "TBODY") { tableBody = gv.firstChild; } else { tableBody = gv.firstChild.nextSibling; } var headerRow = tableBody.firstChild; //check if the array has the same number of items than there are rows if(colTooltips.length > headerRow.children.length) colTooltips.length = headerRow.children.length; for(var i=0; i<colTooltips.length; i++) { var tableCell = headerRow.children[i]; tableCell.title = colTooltips[i]; } } </script>

The result can be seen on the following image.

  Posted on: Friday, April 06, 2007 12:27:45 AM (Romance Daylight Time, UTC+02:00)   |   Comments [1]
         
2/4/2012   3:41:38 PM
 Welcome to Snowball.be
Hello and welcome to snowball.be!

My name is Gill Cleeren, I'm a Microsoft Regional Director and an MVP ASP.NET.
On Snowball.be, you'll find all kind news and articles on .net, ASP.NET, WPF, Silverlight and Microsoft in general.
More on me can be found on my about page.

Should you have any questions, don't hesitate to contact me by Send mail to the author(s) .

 Partner sites
 Most popular tags
.net (124) .net 3.0 (6) .net 3.5 (18) .NET 4 (18) .NET Show (1) ADO.net (4) ASP.net (53) ASP.net AJAX (4) ASP.NET MVC (3) Atlas (12) Azure (2) Blend (2) Book (5) Book review (4) C# (43) Case studies (1) Chopsticks (3) Community (10) Community Day (15) Consoles (1) Database (1) DevDays09 (4) DotNetNuke (4) Efficiency (57) Enterprise Library (5) Events (60) Expression (7) Games (3) Hardware (9) Internet (18) IT (1) jQuery (1) LightSwitch (3) Links (11) LINQ (4) Mac (2) Metro (1) Microsoft (75) Mix 07 (6) Mix 08 (4) Mix 09 (1) Mix 11 (1) Movies (4) MVP (5) MVP Summit 2008 (3) mvvm (1) Office 2007 (10) Other (8) PDC (22) PDC2008 (10) Personal (36) ppt (9) Programming (52) Programming tools (22) Regional Director (2) Silverlight (142) Silverlight Advent Calendar (24) sl4 (44) Slide decks (13) Snowball (13) Software (20) Microsoft (25) Speaking (14) SQL Server (10) TechDays (13) TechEd (14) telerik (6) Telerik (6) TFS (1) Twitter (1) Vista (73) Vista Tricks (9) Visual Studio.net (38) Visug (33) VS2010 (8) Wallpaper (2) WCF (2) Webcasts (9) Webinars (5) Windows (41) Windows 7 (5) Windows 8 (1) Windows Azure (2) Windows Mobile (3) Windows Phone 7 (2) WinFX (17) WinRT (1) WP7 (2) WPF (40) XAML (24)

 On this page
 This site
 Archives
Navigation
 Sitemap
 Blogroll OPML
 Disclaimer

All content is property of www.snowball.be. Nothing on this site can be copied or published elsewhere, unless otherwise stated.

This site is made by Gill Cleeren.

Questions? Opinions? Send mail to the author(s) E-mail