zoukankan      html  css  js  c++  java
  • ASP.NET 2.0中GridView无限层复杂表头的实现(datagrid大同小易,repeater就不必这样,直接有头模版布局就可以)

    1.

    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() * 100, 2);
          dr[3] = System.Math.Round(rd.NextDouble() * 100, 2);
          dr[4] = System.Math.Round(rd.NextDouble() * 100, 2);
          dr[5] = 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,相当于表格的 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);
        }
      }

      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 * 100, 2)
          dr(3) = System.Math.Round(rd.NextDouble * 100, 2)
          dr(4) = System.Math.Round(rd.NextDouble * 100, 2)
          dr(5) = System.Math.Round(rd.NextDouble * 100, 2)
          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(0, 0, 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>

    2.在datagrid 数据绑定事件代码实现

    TableCellCollection tc = e.Item.Cells;
            if (e.Item.ItemType == ListItemType.Header)
            {
                //tc[0] = new TableHeaderCell();
                tc[0].RowSpan = 2;
                tc[7].Style.Add("border-left", "1px solid #000");
                tc.RemoveAt(e.Item.Cells.Count - 1);

                TableHeaderCell thc1 = new TableHeaderCell();
                thc1.Text = "New to Quidsi (first order contains:)";
                thc1.Style.Add("border-bottom", "solid 2px #000;");
                thc1.ColumnSpan = 6;
                tc.AddAt(1, thc1);
                TableHeaderCell thc2 = new TableHeaderCell();
                thc2.Text = "Existing Customer";
                thc2.Style.Add("border-bottom", "2px solid #000");
                thc2.Style.Add("border-left", "1px solid #000");
                thc2.ColumnSpan = 2;
                tc.AddAt(2, thc2);

                TableHeaderCell thc3 = new TableHeaderCell();
                thc3.Text = "Total</th></tr>";
                thc3.RowSpan = 2;
                tc.AddAt(3, thc3);
                //tc[5].Text =  + tc[5].Text;
            }
            else
                tc[7].Style.Add("border-left", "1px solid #000");

  • 相关阅读:
    解决 搭建Jekins过程中 启动Tomcat的java.net.UnknownHostException异常
    射手和农场主
    java 和 JS(javaScript)中的反斜杠正则转义
    分享修改密码的SharePoint Web part: ITaCS Change Password web part
    分享微软官方Demo用的SharePoint 2010, Exchange 2010, Lync 2010虚拟机
    Office 365 的公共网站的一些限制及解决的办法
    SharePoint 2013 关闭 customErrors
    安装 KB2844286 导致SharePoint 2010 XSLT web part 显示出现错误
    安装Office Web Apps Server 2013 – KB2592525安装失败
    如何将hyper-v虚拟机转换成vmware的虚拟机- 转换SharePoint 2010 Information Worker Demonstration and Evaluation Virtual Machine (SP1)
  • 原文地址:https://www.cnblogs.com/scottpei/p/1794461.html
Copyright © 2011-2022 走看看