1. 程式人生 > >asp.net GridView多行表頭的實現

asp.net GridView多行表頭的實現

方法一:

多行表頭合併效果圖

測試多行合併表頭
表頭表頭1表頭2表頭3
表頭1-1表頭2-1表頭2-2表頭3-1表頭3-2表頭3-3
 1    protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
 2    {
 3        //判斷建立的行是否為表頭行
 4        if (e.Row.RowType == DataControlRowType.Header)
 5        {
 6            //獲取表頭所在行的所有單元格
 7            TableCellCollection tcHeader = e.Row.Cells;
 8            //清除自動生成的表頭
 9            tcHeader.Clear();
10
11            //新新增的第一個表頭單元格, 設定為合併7個列, 從而形成一行.
12            tcHeader.Add(new TableHeaderCell());
13            tcHeader[0].ColumnSpan = 7;
14            tcHeader[0].Text = "測試多行合併表頭</th></tr><tr>";
15            //</th>表示當前單元格結束, </tr>表示本行結束, <tr>另起新一行    關鍵點
16            
17            //新增第二個表頭單元格, 設定為合併兩行.
18            tcHeader.Add(new TableHeaderCell());
19            tcHeader[1].RowSpan = 2;
20            tcHeader[1].Text = "表頭";
21
22            tcHeader.Add(new TableHeaderCell());
23            tcHeader[2].Text = "表頭1";
24
25            tcHeader.Add(new TableHeaderCell());
26            tcHeader[3].ColumnSpan = 2;
27            tcHeader[3].Text = "表頭2";
28
29            tcHeader.Add(new TableHeaderCell());
30            tcHeader[4].ColumnSpan = 3;
31            tcHeader[4].Text = "表頭3</th></tr><tr>";
32            
33            //第二行的所有的單元格新增完成, 換行</th></tr><tr>
34
35            //新增第三行所有的單元格
36              tcHeader.Add(new TableHeaderCell());
37            tcHeader[5].Text = "表頭1-1";
38
39            tcHeader.Add(new TableHeaderCell());
40            tcHeader[6].Text = "表頭2-1";
41
42            tcHeader.Add(new TableHeaderCell());
43            tcHeader[7].Text = "表頭2-2";
44
45            tcHeader.Add(new TableHeaderCell());
46            tcHeader[8].Text = "表頭3-1";
47
48            tcHeader.Add(new TableHeaderCell());
49            tcHeader[9].Text = "表頭3-2";
50
51            tcHeader.Add(new TableHeaderCell());
52            tcHeader[10].Text = "表頭3-3</th></tr><tr>";
53        }
54
55    }
方法二:
實現方法就是給單元格填充我們想要的格式程式碼。

protected void GridView1_RowCreated( object sender, GridViewRowEventArgs e )
  {

    if (e.Row.RowType == DataControlRowType.Header)
    {
      //建立一個GridViewRow,相當於表格的 TR 一行
      GridViewRow rowHeader = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Normal);
      string HeaderBackColor = "#EDEDED";
      rowHeader.BackColor = System.Drawing.ColorTranslator.FromHtml(HeaderBackColor);

      //實現確定要顯示的表頭樣式,也可以通過計算生成

      //    <tr>
      //      <td rowspan='2'>關鍵單元格</td>
      //      <td colspan='2'>表頭文字</td>
      //      <td colspan='2'>表頭文字</td>
      //      <td>表頭文字</td>
      //      </tr>
      //      <tr bgcolor='#FFF'>
      //      <td colspan='2'>表頭文字</td>
      //      <td rowspan='2'>表頭文字</td>
      //      <td colspan='2'>表頭文字</td>
      //      </tr>
      //      <tr bgcolor='#FFF'>
      //      <td>表頭文字</td>
      //      <td>表頭文字</td>
      //      <td>表頭文字</td>
      //      <td>表頭文字</td>
      //      <td>表頭文字</td>";
      //   </tr>
      // 上面的樣式可以設定斜線

      Literal newCells = new Literal();
      newCells.Text = @"表頭文字1</th>
                  <th colspan='2'>表頭文字2</th>
                  <th colspan='2'>表頭文字3</th>
                  <th>表頭文字4</th>
                  </tr>
                  <tr bgcolor='" + HeaderBackColor + "'>";
      newCells.Text += @"                         
                  <th colspan='2'>表頭文字5</th>
                  <th rowspan='2'>表頭文字6</th>
                  <th colspan='2'>表頭文字7</th>
                  </tr>
                  <tr bgcolor='" + HeaderBackColor + "'>";
      newCells.Text += @"  
                  <th>表頭文字8</th>
                  <th>表頭文字9</th>
                  <th>表頭文字10</th>
                  <th>表頭文字11</th>
                  <th>表頭文字12";

      TableCellCollection cells = e.Row.Cells;
      TableHeaderCell headerCell = new TableHeaderCell();
      //下面的屬性設定與 <td rowspan='2'>關鍵單元格</td> 要一致
      headerCell.RowSpan = 2;
      headerCell.Controls.Add(newCells);
      rowHeader.Cells.Add(headerCell);

      rowHeader.Cells.Add(headerCell);
      rowHeader.Visible = true;

      //新增到 GridView1
      GridView1.Controls[0].Controls.AddAt(0, rowHeader);
    }
  }