puoi agire sia sul controllo, ovvero direttamente nel gridview manipolando le celle,
sia sulla tebella finale, ovvero costruendo manualmente una tabella mentre scorri le righe del gridview.
Nel primo modo devi agire su GridView1_RowCreated e/o il metodo render per modificare le righe e/o aggiungere o modificare header ed altro.
Esempio:
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
e.Row.SetRenderMethodDelegate(new RenderMethod(HeaderRenderMethod));
}
}
Vedi articolo http://synthesis.net.pl/2008/03/19/OwnHeaderOfGridViewMultilineWithGroupingFromHtml.aspx
Nel secondo modo costruisci un HtmlTable come più ti piace
Esempio:
HtmlTable mytable = new HtmlTable();
generaHeader(_resultList.Columns, ref mytable);
generaRighe(_resultList, ref mytable);
private void generaHeader(DataColumnCollection Colonne, ref HtmlTable myTable)
{
HtmlTableRow tHead = new HtmlTableRow();
foreach (DataColumn colonna in Colonne)
{
string sClass = string.Empty;
HtmlTableCell tCella = new HtmlTableCell("th");
tCella.InnerText = colonna.ColumnName;
tHead.Cells.Add(tCella);
}
myTable.Rows.Add(tHead);
}
private void generaRighe(DataTable Sorgentedati, ref HtmlTable mytable)
{
foreach (DataRow row in Sorgentedati.Rows)
{
HtmlTableRow tRow = new HtmlTableRow();
string valore = string.Empty;
string tipo = string.Empty;
string sClass = string.Empty;
string colName = string.Empty;
for (int i = 0; i < row.ItemArray.Length; i++)
{
HtmlTableCell tCella = new HtmlTableCell("td");
valore = row[i].ToString();
tipo = row[i].GetType().Name;
colName = Sorgentedati.Columns[i].ColumnName;
//if (valore != string.Empty)
//{
tCella.InnerText = valore;
//}
tRow.Cells.Add(tCella);
}
mytable.Rows.Add(tRow);
}
}