I have been looking for a way to add headers to a grid view and to be able to re use this code this code snippet could help adding the headers to grid view
The Method that Dose the work:
Demo solution Downlod Download sourcecode
Description:
Gridview comes with a header for each column, you can't have an extra header to your Gridview, we can use the caption to some HTML tags and start building the extra headers, for me I did not like this solution, and came up with this code snippet
This method checks if the row of type header r then adds a row to the Gridview of type header by creating an object of type GridViewRow :
row = new GridViewRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal);
to add the celss I Declaird an IDictionaryEnumerator that will count the cells passed by a sorted list , then within the sorted list I creat an arry of strings that ill be used to set the cells properties , an d last adding the Cells to the row
IDictionaryEnumerator enumCels = GetCels.GetEnumerator();
public void GetMyMultiHeader(GridViewRowEventArgs e, SortedList GetCels)
{
if (e.Row.RowType == DataControlRowType.Header)
{GridViewRow row;
IDictionaryEnumerator enumCels = GetCels.GetEnumerator();
"MARGIN: 0in 0in 0pt; DIRECTION: ltr; unicode-bidi: embed; TEXT-ALIGN: left; mso-layout-grid-align: none">
row = new GridViewRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal);
while (enumCels.MoveNext())
{
string[] cont = enumCels.Value.ToString().Split(Convert.ToChar(","));
TableCell Cell;
Cell = new TableCell();
Cell.RowSpan = Convert.ToInt16(cont[2].ToString());
Cell.ColumnSpan = Convert.ToInt16(cont[1].ToString());
Cell.Controls.Add(new LiteralControl(cont[0].ToString()));
Cell.HorizontalAlign = HorizontalAlign.Center;
Cell.ForeColor = System.Drawing.Color.White;
row.Cells.Add(Cell);
}
e.Row.Parent.Controls.AddAt(0, row);
}
}
How to use the methode we have to use a sorted list as so
the key of the sorted list is the cell position , and the contetn of the
sell is the valu with a comma delemeted the first index is the text , the next index is the colmn span , and the 3ed index is the row span
like this example
protected void GridViewData_RowDataBound(object sender, GridViewRowEventArgs e)
{
SortedList creatCels = new SortedList();
creatCels.Add("1", ",5,2");
creatCels.Add("2", "Comments,4,1");
creatCels.Add("3", ",1,2");
SortedList creatCels2 = new SortedList();
creatCels2.Add("1", "Total Amount of,2,1");
creatCels2.Add("2", "Total Amount of,2,1");
GetMyMultiHeader(e, creatCels2);
GetMyMultiHeader(e, creatCels);
}