科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件ASP.NET 2.0中GridView无限层复杂表头的实现

ASP.NET 2.0中GridView无限层复杂表头的实现

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

ASP.NET 2.0中GridView无限层复杂表头的实现

作者:孟宪会 来源:CSDN 2007年12月16日

关键字: 复杂表头 无限层 GridView

  • 评论
  • 分享微博
  • 分享邮件

实现方法就是给单元格填充我们想要的格式代码。

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.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)));
    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= "学生" + i.ToString();
      dr[
2= System.Math.Round(rd.NextDouble() * 1002);
      dr[
3= System.Math.Round(rd.NextDouble() * 1002);
      dr[
4= System.Math.Round(rd.NextDouble() * 1002);
      dr[
5= System.Math.Round(rd.NextDouble() * 1002);
      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,相当于表格的 TR 一行
      GridViewRow rowHeader = new GridViewRow(00, 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);
    }
  }

  protected 
void GridView1_RowDataBound( object sender, GridViewRowEventArgs e )
  {
    
if (e.Row.RowType == DataControlRowType.Header)
    {
      e.Row.Attributes.Add(
"style""background:#9999FF;color:#FFFFFF;font-size:14px");
    }
    
else
    {
      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
="600px" BackColor="#000000" BorderWidth="0" OnRowDataBound="GridView1_RowDataBound"
      OnRowCreated
="GridView1_RowCreated">
    
</asp:GridView>
  
</form>
</body>
</html>

VB.NET

<%@ Page Language="VB" 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">
  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.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)))
    dt.Columns.Add(New System.Data.DataColumn(
"计算机", GetType(System.Decimal)))
    Dim i As Integer 
= 0
    While i 
< 8
      Dim rd As System.Random 
= New System.Random(Environment.TickCount * i)

      dr 
= dt.NewRow
      dr(
0= "班级" + i.ToString
      dr(
1= "学生" + i.ToString
      dr(
2= System.Math.Round(rd.NextDouble * 1002)
      dr(
3= System.Math.Round(rd.NextDouble * 1002)
      dr(
4= System.Math.Round(rd.NextDouble * 1002)
      dr(
5= System.Math.Round(rd.NextDouble * 1002)
      dt.Rows.Add(dr)
      System.Math.Min(System.Threading.Interlocked.Increment(i), i 
- 1)
    End While
    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(00, DataControlRowType.Header, DataControlRowState.Normal)
      Dim HeaderBackColor As String 
= "#EDEDED"
      rowHeader.BackColor 
= System.Drawing.ColorTranslator.FromHtml(HeaderBackColor)
      Dim newCells As Literal 
= New Literal
      newCells.Text 
= "表头文字1</th>" + _
                      
" <th colspan='2'>表头文字2</th>" + _
                      
" <th colspan='2'>表头文字3</th>" + _
                      
" <th>表头文字4</th>" + _
                      
" </tr>" + _
                      
" <tr bgcolor='" + HeaderBackColor + "'>" + _
                      
"  <th colspan='2'>表头文字5</th>" + _
                      
"  <th rowspan='2'>表头文字6</th>" + _
                      
" <th colspan='2'>表头文字7</th>" + _
                      
" </tr>" + _
                      
" <tr bgcolor='" + HeaderBackColor + "'>" + _
                      
"  <th>表头文字8</th>" + _
                      
"  <th>表头文字9</th>" + _
                      
"  <th>表头文字10</th>" + _
                      
"  <th>表头文字11</th>" + _
                      
"  <th>表头文字12"
      Dim cells As TableCellCollection 
= e.Row.Cells
      Dim headerCell As TableHeaderCell 
= New TableHeaderCell
      headerCell.RowSpan 
= 2
      headerCell.Controls.Add(newCells)
      rowHeader.Cells.Add(headerCell)
      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)
    If e.Row.RowType 
= DataControlRowType.Header Then
      e.Row.Attributes.Add(
"style""background:#9999FF;color:#FFFFFF;font-size:14px")
    Else
      e.Row.Attributes.Add(
"style""background:#FFF")
    End If
  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
="600px" BackColor="#000000" BorderWidth="0" OnRowDataBound="GridView1_RowDataBound"
      OnRowCreated
="GridView1_RowCreated">
    
</asp:GridView>
  
</form>
</body>
</html>

查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章