Look Here:
代码片断
1、DataGrid显示双层表头
http://xml.sz.luohuedu.net/xml/ShowDetail.asp?id=B3F3462D-DC34-41CE-9FEE-6965B2A3D1AD
假设你的DataGrid有三列,现在想将前两列作为"大类1",第三列作为"大类2",现在,你可以在ItemDataBound事件中加入下面的代码:
if (e.Item.ItemType == ListItemType.Header)
{
e.Item.Cells[0].ColumnSpan = 2;
e.Item.Cells[0].Text = "大类1</td><td>大类2</td></tr><tr><td>" + e.Item.Cells[0].Text;
}
用这个方法可以为任意添加新行。
 C#
if (e.Item.ItemType == ListItemType.Header)
{
DataGridItem dgi = new DataGridItem(0,-1,ListItemType.Header);
DataGridItem dgi1= new DataGridItem(0,-1,ListItemType.Header);
Table tb = new Table();
tb = (Table)DataGrid1.Controls[0];
tb.Rows.AddAt(0,dgi);
tb.Rows.AddAt(1,dgi1);
TableCell tc = new TableCell();
TableCell tc1 = new TableCell();
TableCell tc2 = new TableCell();
TableCell tc22 = new TableCell();
tc.Text = "ddd";
tc.ColumnSpan = 1;
dgi.Cells.Add(tc);
tc1.Text = "ddd2";
tc1.ColumnSpan = 1;
dgi.Cells.Add(tc1);
tc2.Text = "ddd";
tc2.ColumnSpan = 1;
dgi1.Cells.Add(tc2);
tc22.Text = "ddd2";
tc22.ColumnSpan = 1;
dgi1.Cells.Add(tc22);

}

解决方案 »

  1.   

    还有一种方法,把表头用table实现,数据用无表头的datagrid实现,唯一要注意的问题就是列宽要确定,要对齐。
      

  2.   

    那个例子我看了,用的也是表格,其实datagrid到了客户端也是table。
    我看你做的应该是报表类的东西吧,对于这种格式比较固定的表格,在design时写好就行了,不要用服务器端的代码实现,会增加服务器负担,也不直观。
    总之,没有固定的一种解决方法,送你四个字,随机应变。
      

  3.   

    把表头用table实现??
    如何写?
    是这样吗?
    <asp:TemplateColumn>
    <HeaderTemplate>
    <table>...</table>
    </HeaderTemplate>
    <asp:TemplateColumn>
    这样不行的。
      

  4.   

    这样<HeaderTemplate>
    <FONT face="宋体">
    <TABLE id="Table1" cellSpacing="1" cellPadding="1" width="100" border="1">
    <TR>
    <TD>加班</TD>
    </TR>
    <TR>
    <TD>开始日期</TD>
    </TR>
    </TABLE>
    </FONT>
    </HeaderTemplate>