|
using System;
using System.Collections.Generic;
using System.Linq;
namespace DynamicMutipleRowHeaderSilverlighGrid
{
public class DynamicHeaders
{
List<DynamicHeader> Headers;
int _HeaderRows;
int _HeaderCols;
public DynamicHeaders(String Header)
{
Headers = new List<DynamicHeader>();
String[] HeaderParts = Header.Split(',');
foreach (String tmpHeaderPart in HeaderParts)
Headers.Add(new DynamicHeader(tmpHeaderPart));
_HeaderCols = Headers.Count;
_HeaderRows = Headers.Max(H => H.HeaderDepth);
ParseHeader();
}
public List<RowHeader> ParseHeader()
{
//Creating an Array with the headings
Array HeaderCells = Array.CreateInstance(typeof(DynamicHeaderCell), _HeaderRows, _HeaderCols);
for (int i = 0; i < Headers.Count; i++)
{
DynamicHeader tmpDynamicHeader = Headers[i];
for (int j = 0; j < tmpDynamicHeader.Headers.Length; j++)
{
String HeaderString = tmpDynamicHeader.Headers[j];
HeaderCells.SetValue(new DynamicHeaderCell(HeaderString), j, i);
}
}
//Marge the columns
for (int i = 0; i < _HeaderRows; i++)
{
for (int j = 0; j < _HeaderCols; j++)
{
DynamicHeaderCell HeaderCell1 = (DynamicHeaderCell)HeaderCells.GetValue(i, j);
if (HeaderCell1 == null)
continue;
for (int k = j + 1; k < _HeaderCols; k++)
{
DynamicHeaderCell HeaderCell2 = (DynamicHeaderCell)HeaderCells.GetValue(i, k);
if (HeaderCell2 == null)
continue;
if (HeaderCell1.Header.Equals(HeaderCell2.Header))
{
HeaderCell1.ColSpan++;
HeaderCells.SetValue(null, i, k);
}
}
}
}
//Marge the Rows
for (int j = 0; j < _HeaderCols; j++)
{
for (int i = 0; i < _HeaderRows; i++)
{
DynamicHeaderCell HeaderCell1 = (DynamicHeaderCell)HeaderCells.GetValue(i, j);
if (HeaderCell1 == null)
continue;
for (int k = i + 1; k < _HeaderRows; k++)
{
DynamicHeaderCell HeaderCell2 = (DynamicHeaderCell)HeaderCells.GetValue(k, j);
if (HeaderCell2 == null)
{
HeaderCell1.RowSpan++;
HeaderCells.SetValue(null, k, j);
}
else
{
break;
}
}
}
}
//Creating an Arraylist.
//This will contain List of DynamicHeaderCell for each row
//GridView will render these
List<RowHeader> HeaderRows = new List<RowHeader>();
for (int i = 0; i < _HeaderRows; i++)
{
RowHeader RowHeaderCell = new RowHeader();
for (int j = 0; j < _HeaderCols; j++)
{
DynamicHeaderCell HeaderCell = (DynamicHeaderCell)HeaderCells.GetValue(i, j);
if (HeaderCell == null)
continue;
RowHeaderCell.RowHeaderCells.Add(HeaderCell);
}
HeaderRows.Add(RowHeaderCell);
}
return HeaderRows;
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.