Click here to Skip to main content
15,885,309 members
Articles / Web Development / HTML
Article

Fixed header in ASP.NET DataGrid

Rate me:
Please Sign up or sign in to vote.
4.71/5 (44 votes)
20 Apr 20052 min read 477K   92   83
How to get a fixed header row in an ASP.NET DataGrid?

Introduction

A very common design request is to create a DataGrid list, that can contain many rows (e.g. account contacts list), that has a fixed maximum height and a scrollbar when there are more rows than can fit into the allotted space. This is easily done by putting the DataGrid within a DIV tag:

ASP.NET
<DIV style="OVERFLOW: auto; HEIGHT: 
120px">
<asp:DataGrid ...
</DIV>

Then the next design request made by customers is to have a scrolling body with fixed column headers so that, users don't have to remember which column contains what. Such a fixed header that stays put and never scroll out of view can be made using a style like this:

ASP.NET
<style type="text/css">
<!--
.DataGridFixedHeader {background-color: white; position:relative; top:expression(this.offsetParent.scrollTop);}
-->
</style>

The background color is needed to hide the data rows as they scroll under the header row. Make sure that the style is on a single line, the expression might not work when the style definition uses multiple lines.

Apply the new header style to the DataGrid using the HeaderStyle element:

ASP.NET
<asp:DataGrid id="dgContacts" runat="server" ... >
...
<HeaderStyle CssClass="ms-formlabel DataGridFixedHeader"></HeaderStyle>
...

Note how can you apply multiple classes within the CssClass attribute to combine several styles to achieve reuse in your web pages or to combine them with styles that are not your own (such as SharePoint styles).

There are several other suggestions out there on how to achieve a fixed header row, such as having a separate table above the DataGrid, but this suffers from alignment and column width problems, for e.g., when a table cell contains non-breaking content. It also creates more work when changing the columns of the DataGrid. The style solution in this article, however, is as simple as it gets.

Supported Browsers

This solution is based on CSS expressions, and works with MSIE 5.x and 6.x. It is pure client-side and should not interfere with server-side code (except for adding the style), but it might behave strange if you have other positioning stuff in your page.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
Norway Norway
My blog: kjellsj.blogspot.com
My contribution to other stuff at CodeProject:
PleaseWaitButton

Comments and Discussions

 
GeneralRe: Problem when placed dropdown control in datagrid Pin
bguill24-May-06 1:42
bguill24-May-06 1:42 
GeneralRe: Problem when placed dropdown control in datagrid [modified] Pin
RonTrull5-Jun-06 8:46
RonTrull5-Jun-06 8:46 
GeneralRe: Problem when placed dropdown control in datagrid Pin
Your Friend Manoj26-Feb-07 23:20
Your Friend Manoj26-Feb-07 23:20 
QuestionRe: Problem when placed dropdown control in datagrid Pin
sayanghosh28-Feb-07 1:36
sayanghosh28-Feb-07 1:36 
GeneralMulti-row Headers Pin
Wasia29-Apr-05 9:29
Wasia29-Apr-05 9:29 
QuestionPaging turned on- Can you Fix the Pager as well? Pin
SteveMets28-Apr-05 6:34
professionalSteveMets28-Apr-05 6:34 
AnswerRe: Paging turned on- Can you Fix the Pager as well? Pin
KjellSJ28-Apr-05 7:42
KjellSJ28-Apr-05 7:42 
GeneralRe: Paging turned on- Can you Fix the Pager as well? Pin
SteveMets1-May-05 9:25
professionalSteveMets1-May-05 9:25 
I tried this, but it had no effect. My understanding of CSS is that it identifies an HTML tag, and then overrides any settings applied globally to that tag. A Header has Template Header tags to apply the CSS settings to. What is the Tag for a Pager?
GeneralRe: Paging turned on- Can you Fix the Pager as well? Pin
KjellSJ1-May-05 20:46
KjellSJ1-May-05 20:46 
AnswerRe: Paging turned on- Can you Fix the Pager as well? Pin
SteveMets11-May-05 20:41
professionalSteveMets11-May-05 20:41 
GeneralThank you very much! Pin
jgshiloh22-Apr-05 2:42
jgshiloh22-Apr-05 2:42 
GeneralFor Gecko users... Pin
A name not registered?21-Apr-05 3:27
sussA name not registered?21-Apr-05 3:27 
GeneralRe: For Gecko users... Pin
KjellSJ21-Apr-05 9:27
KjellSJ21-Apr-05 9:27 
GeneralRe: For Gecko users... Pin
A name not registered :)21-Apr-05 20:09
sussA name not registered :)21-Apr-05 20:09 
GeneralRe: For Gecko users... Pin
Ashley van Gerven17-Oct-05 2:39
Ashley van Gerven17-Oct-05 2:39 
GeneralHaving some problems. Pin
christ7520-Apr-05 12:42
christ7520-Apr-05 12:42 
GeneralRe: Having some problems. Pin
KjellSJ20-Apr-05 20:51
KjellSJ20-Apr-05 20:51 
GeneralRe: Having some problems. Pin
KjellSJ21-Apr-05 20:17
KjellSJ21-Apr-05 20:17 
GeneralThis is great!!! Pin
jalbitz20-Apr-05 6:15
jalbitz20-Apr-05 6:15 
Questionwhat about when paging is turned on? Pin
justinkhill13-Apr-05 7:47
sussjustinkhill13-Apr-05 7:47 
AnswerRe: what about when paging is turned on? Pin
KjellSJ13-Apr-05 22:14
KjellSJ13-Apr-05 22:14 
GeneralIt works but it is interfering css Pin
kraftspl9-Apr-05 12:33
kraftspl9-Apr-05 12:33 
GeneralRe: It works but it is interfering css Pin
KjellSJ10-Apr-05 1:41
KjellSJ10-Apr-05 1:41 
GeneraloNot working Pin
wal2948-Apr-05 12:20
wal2948-Apr-05 12:20 
GeneralRe: Not working Pin
KjellSJ8-Apr-05 21:38
KjellSJ8-Apr-05 21:38 

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.