In this article I’m going
to explain how to create GridView header row programmatically in ASP.NET using
C#.
I got one requirement that I have to
create GridView header row programmatically. In my scenario I have to create
Multiple Header row which includes header style. It’s very easy once I figure
out what the proper event in the page lifecycle to use. I have used OnRowCreated="gvEmployee_RowCreated"
event to achieve the task.
In this demo I have
used XML to bind GridView. After binding the GridView we have to create OnRowCreated
event.
Sample code:
protected void
gvEmployee_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
…
}
}
GridViewRow class is used to create GridView rows which includes DataRow, EmptyDatarow,
Footer, Header, Pager and Separator.
Sample
code:
GridViewRow HeaderRow = new GridViewRow(1,
0, DataControlRowType.Header, DataControlRowState.Insert);
TableCell class
is used to create cell which will be added to corresponding Header row.
Sample
code:
TableCell HeaderCell2 = new TableCell();
HeaderCell2.Text = "Personal Details";
HeaderCell2.ColumnSpan = 2;
HeaderRow.Cells.Add(HeaderCell2);
After
we have to add Header row to the GridView.
Sample
code:
gvEmployee.Controls[0].Controls.AddAt(0,
HeaderRow);
Design your aspx page like this
Designer source code:
<%@ 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>gridview
header</title>
<style type="text/css">
.header
{
background-color:#3E3E3E;
font-family:Calibri;
color:White;
text-align:center;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="gvEmployee" runat="server" AutoGenerateColumns="false" Width="600px"
OnRowCreated="gvEmployee_RowCreated" ShowHeader="false">
<RowStyle Font-Names="Calibri" />
<Columns>
<asp:BoundField DataField="empid" />
<asp:BoundField DataField="name" />
<asp:BoundField DataField="city" />
<asp:BoundField DataField="country" />
<asp:BoundField DataField="designation" />
<asp:BoundField DataField="joiningdate" />
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
C# code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
public partial class _Default :
System.Web.UI.Page
{
protected void Page_Load(object
sender, EventArgs e)
{
if
(!IsPostBack)
{
BindData();
}
}
protected void BindData()
{
DataSet
ds = new DataSet();
ds.ReadXml(Server.MapPath("EmployeeDetails.xml"));
if (ds
!= null && ds.HasChanges())
{
gvEmployee.DataSource = ds;
gvEmployee.DataBind();
}
}
protected void gvEmployee_RowCreated(object
sender, GridViewRowEventArgs e)
{
if
(e.Row.RowType == DataControlRowType.Header)
{
GridViewRow
HeaderRow = new GridViewRow(1,
0, DataControlRowType.Header, DataControlRowState.Insert);
TableCell
HeaderCell2 = new TableCell();
HeaderCell2.Text = "Personal Details";
HeaderCell2.ColumnSpan = 2;
HeaderRow.Cells.Add(HeaderCell2);
HeaderCell2 = new TableCell();
HeaderCell2.Text = "Location";
HeaderCell2.ColumnSpan = 2;
HeaderRow.Cells.Add(HeaderCell2);
HeaderCell2 = new TableCell();
HeaderCell2.Text = "Office details";
HeaderCell2.ColumnSpan = 2;
HeaderRow.Cells.Add(HeaderCell2);
gvEmployee.Controls[0].Controls.AddAt(0, HeaderRow);
GridViewRow
HeaderRow1 = new GridViewRow(0,
0, DataControlRowType.Header, DataControlRowState.Insert);
TableCell
HeaderCell = new TableCell();
HeaderCell.Text = "Employee-ID";
HeaderRow1.Cells.Add(HeaderCell);
HeaderCell = new TableCell();
HeaderCell.Text = "Name";
HeaderRow1.Cells.Add(HeaderCell);
HeaderCell = new TableCell();
HeaderCell.Text = "City";
HeaderRow1.Cells.Add(HeaderCell);
HeaderCell = new TableCell();
HeaderCell.Text = "Country";
HeaderRow1.Cells.Add(HeaderCell);
HeaderCell = new TableCell();
HeaderCell.Text = "Designation";
HeaderRow1.Cells.Add(HeaderCell);
HeaderCell = new TableCell();
HeaderCell.Text = "Joining date";
HeaderRow1.Cells.Add(HeaderCell);
HeaderRow.Attributes.Add("class", "header");
HeaderRow1.Attributes.Add("class", "header");
gvEmployee.Controls[0].Controls.AddAt(1, HeaderRow1);
}
}
}