在實際工作中,往往需要合并表格頭部的單元格,下面就是一個實現的例子。運行結果如圖:

C#

<% @?Page?Language = " C# " ?AutoEventWireup = " true " ? %>

<! DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"
?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>

< script? runat ="server" >
??ICollection?CreateDataSource()
??
{
????System.Data.DataTable?dt?
= ? new ?System.Data.DataTable();
????System.Data.DataRow?dr;
????dt.Columns.Add(
new ?System.Data.DataColumn( " 學生姓名 " ,? typeof (System.String)));
????dt.Columns.Add(
new ?System.Data.DataColumn( " 語文 " ,? typeof (System.Decimal)));
????dt.Columns.Add(
new ?System.Data.DataColumn( " 數學 " ,? typeof (System.Decimal)));
????dt.Columns.Add(
new ?System.Data.DataColumn( " 英語 " ,? typeof (System.Decimal)));
????
for ?( int ?i? = ? 0 ;?i? < ? 8 ;?i ++ )
????
{
??????System.Random?rd?
= ? new ?System.Random(Environment.TickCount? * ?i);?;
??????dr?
= ?dt.NewRow();
??????dr[
0 ]? = ? " 學生 " ? + ?i.ToString();
??????dr[
1 ]? = ?System.Math.Round(rd.NextDouble()? * ? 100 ,? 2 );
??????dr[
2 ]? = ?System.Math.Round(rd.NextDouble()? * ? 100 ,? 2 );
??????dr[
3 ]? = ?System.Math.Round(rd.NextDouble()? * ? 100 ,? 2 );
??????dt.Rows.Add(dr);
????}

????System.Data.DataView?dv?
= ? new ?System.Data.DataView(dt);
????
return ?dv;
??}


??protected?
void ?Page_Load(object?sender,?EventArgs?e)
??
{
????
if ?( ! IsPostBack)
????
{

??????GridView1.BorderColor?
= ?System.Drawing.Color.DarkOrange;
??????GridView1.DataSource?
= ?CreateDataSource();
??????GridView1.DataBind();
????}

??}


??protected?
void ?GridView1_RowCreated(object?sender,?GridViewRowEventArgs?e)
??
{
????
if ?(e.Row.RowType? == ?DataControlRowType.Header)
????
{
??????GridViewRow?rowHeader?
= ? new ?GridViewRow( 0 ,? 0 ,?DataControlRowType.Header,?DataControlRowState.Normal);
??????rowHeader.BackColor?
= ?System.Drawing.Color.White;
??????rowHeader.Font.Bold?
= ? true ;

??????TableCellCollection?cells?
= ?e.Row.Cells;
??????TableCell?headerCell?
= ? new ?TableCell();
??????headerCell.Text?
= ? "" ;
??????rowHeader.Cells.Add(headerCell);

??????headerCell?
= ? new ?TableCell();
??????headerCell.Text?
= ? " 學生成績 " ;
??????headerCell.ColumnSpan?
= ?cells.Count? - ? 1 ;
??????headerCell.HorizontalAlign?
= ?HorizontalAlign.Center;

??????rowHeader.Cells.Add(headerCell);
??????rowHeader.Visible?
= ? true ;
??????GridView1.Controls[
0 ].Controls.AddAt( 0 ,?rowHeader);
????}

??}


??protected?
void ?GridView1_RowDataBound(object?sender,?GridViewRowEventArgs?e)
??
{
????e.Row.Attributes.Add(
" style " ,? " background:#FFF " );
??}

</ script >

< html? xmlns ="http://www.w3.org/1999/xhtml" >
< head >
??
< title > 合并?GridView?的表頭單元格 </ title >
</ head >
< body >
??
< form? id ="Form1" ?runat ="server" >
????
< asp:GridView? ID ="GridView1" ?runat ="server" ?CellSpacing ="1" ?CellPadding ="3"
??????Font-Size
="12px" ?Width ="300px" ?BackColor ="orange" ?BorderWidth ="0"
??????OnRowDataBound
="GridView1_RowDataBound" ?OnRowCreated ="GridView1_RowCreated" >
????
</ asp:GridView >
??
</ form >
</ body >
</ html >

VB.NET

<% @?Page?Language = " VB " ? %>

<! DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

< script? runat ="server" >
??Function?CreateDataSource()?As?ICollection
????Dim?dt?As?System.Data.DataTable?
= ?New?System.Data.DataTable
????Dim?dr?As?System.Data.DataRow
????dt.Columns.Add(New?System.Data.DataColumn(
" 學生姓名 " ,?GetType(System.String)))
????dt.Columns.Add(New?System.Data.DataColumn(
" 語文 " ,?GetType(System.Decimal)))
????dt.Columns.Add(New?System.Data.DataColumn(
" 數學 " ,?GetType(System.Decimal)))
????dt.Columns.Add(New?System.Data.DataColumn(
" 英語 " ,?GetType(System.Decimal)))
????Dim?i?As?Integer?
= ? 0
????For?i?
= ? 0 ?To? 7
??????Dim?rd?As?System.Random?
= ?New?System.Random(Environment.TickCount? * ?i)

??????dr?
= ?dt.NewRow
??????dr(
0 )? = ? " 學生 " ? + ?i.ToString
??????dr(
1 )? = ?System.Math.Round(rd.NextDouble? * ? 100 ,? 2 )
??????dr(
2 )? = ?System.Math.Round(rd.NextDouble? * ? 100 ,? 2 )
??????dr(
3 )? = ?System.Math.Round(rd.NextDouble? * ? 100 ,? 2 )
??????dt.Rows.Add(dr)
????Next
????Dim?dv?As?System.Data.DataView?
= ?New?System.Data.DataView(dt)
????Return?dv
??End?Function

??Protected?Sub?Page_Load(ByVal?sender?As?Object,?ByVal?e?As?EventArgs)
????If?Not?IsPostBack?Then
??????GridView1.BorderColor?
= ?System.Drawing.Color.DarkOrange
??????GridView1.DataSource?
= ?CreateDataSource()
??????GridView1.DataBind()
????End?If
??End?Sub

??Protected?Sub?GridView1_RowCreated(ByVal?sender?As?Object,?ByVal?e?As?GridViewRowEventArgs)
????If?e.Row.RowType?
= ?DataControlRowType.Header?Then
??????Dim?rowHeader?As?GridViewRow?
= ?New?GridViewRow( 0 ,? 0 ,?DataControlRowType.Header,?DataControlRowState.Normal)
??????rowHeader.BackColor?
= ?System.Drawing.Color.White
??????rowHeader.Font.Bold?
= ?True
??????Dim?cells?As?TableCellCollection?
= ?e.Row.Cells
??????Dim?headerCell?As?TableCell?
= ?New?TableCell
??????headerCell.Text?
= ? ""
??????rowHeader.Cells.Add(headerCell)
??????headerCell?
= ?New?TableCell
??????headerCell.Text?
= ? " 學生成績 "
??????headerCell.ColumnSpan?
= ?cells.Count? - ? 1
??????headerCell.HorizontalAlign?
= ?HorizontalAlign.Center
??????rowHeader.Cells.Add(headerCell)
??????rowHeader.Visible?
= ?True
??????GridView1.Controls(
0 ).Controls.AddAt( 0 ,?rowHeader)
????End?If
??End?Sub

??Protected?Sub?GridView1_RowDataBound(ByVal?sender?As?Object,?ByVal?e?As?GridViewRowEventArgs)
????e.Row.Attributes.Add(
" style " ,? " background:#FFF " )
??End?Sub

</ script >

< html? xmlns ="http://www.w3.org/1999/xhtml" >
< head >
??
< title > 合并?GridView?的表頭單元格 </ title >
</ head >
< body >
??
< form? id ="Form1" ?runat ="server" >
????
< asp:GridView? ID ="GridView1" ?runat ="server" ?CellSpacing ="1" ?CellPadding ="3"
??????Font-Size
="12px" ?Width ="300px" ?BackColor ="orange" ?BorderWidth ="0"
??????OnRowDataBound
="GridView1_RowDataBound" ?OnRowCreated ="GridView1_RowCreated" >
????
</ asp:GridView >
??
</ form >
</ body >
</ html >
?