我创建了一个GridView并为GridVeiw添加了div,使GridView有滚动条的效果,
但是怎样才可以让Gridview固定表头呢,
注意:竖直方向上固定表头,在水平方向上不需要固定,
即:拉动水平滚动条的时候,表头随滚动条一起移动,拉动竖直滚动条时,表头固定不动!!!!!

解决方案 »

  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 < 50; i++)
        {
          System.Random rd = new System.Random(Environment.TickCount * i); ;
          dr = dt.NewRow();
          dr[0] = "班级" + i.ToString();
          dr[1] = "【孟子E章】" + 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.Attributes.Add("style", "table-layout:fixed");
          GridView1.DataSource = CreateDataSource();
          GridView1.DataBind();
        }
      }
      
    </script><script type="text/javascript">
    function s()
    {
     var t = document.getElementById("<%=GridView1.ClientID%>");
     var t2 = t.cloneNode(true)
     for(i = t2.rows.length -1;i > 0;i--)
     t2.deleteRow(i)  
     t.deleteRow(0)  
     a.appendChild(t2) 
    }
    window.onload = s
    </script><html xmlns="http://www.w3.org/1999/xhtml">
    <head>
      <title>创建表头固定,表体可滚动的GridView</title>
    </head>
    <body>
      <form id="Form1" runat="server">
        <table>
          <tr>
            <td>
              <div id="a">
              </div>
              <div style="overflow-y: scroll; height: 200px">
                <asp:GridView ID="GridView1" runat="server" Font-Size="12px" BackColor="#FFFFFF"
                  GridLines="Both" CellPadding="4" Width="560">
                  <HeaderStyle BackColor="#EDEDED" Height="26px" />
                </asp:GridView>
              </div>
            </td>
          </tr>
        </table>
      </form>
    </body>
    </html>
      

  2.   

    <%...@ 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>
      

  3.   

    建议LZ
    去看下孟老大的BLog
    http://blog.csdn.net/net_lover/archive/2006/09/27/1291818.aspx
      

  4.   

    <div id="out" >
    <div id="表頭">
     這里用一個table把表頭設計好
    </div><div id="gridview" style=" overflow-x:auto">
    這里放一個gridview ,不顯示表頭
    <asp:GridView   ShowHeader="false"   ID="GridView1"   runat="server"   /></div><div>
      

  5.   

    http://www.cnblogs.com/zt04985807/archive/2009/01/12/1374022.html
      

  6.   

    2楼说的太复杂了,其实只要CSS控管就OK了,我一直用的这个。
    链接:Girdview 72般绝技之十四--GridView固定表头(不用javascript只用CSS!,很好用)
      

  7.   

    通过div固定,可参考我博客。
      

  8.   

    GridView固定表头(不用javascript只用CSS!,很好用):
     <style> 
    .Freezing 
       { 
        
       position:relative ; 
       table-layout:fixed;
       top:expression(this.offsetParent.scrollTop);   
       z-index: 10;
       } .Freezing th{text-overflow:ellipsis;overflow:hidden;white-space: nowrap;padding:2px;}
    </style>  <asp:GridView ID="GridView1" runat="server" >
    <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" CssClass="Freezing"/>
                        </asp:GridView>
      

  9.   

    http://blog.csdn.net/donghaima/archive/2008/08/08/2787893.aspx
    看看方法二
      

  10.   

    孟老大的方法的确可行!但是你扩展以后取gridview里面的值你还能取到吗?而且每次都初始化加载,删掉数据行,好像??
      

  11.   


    //总价
    decimal SpecialTotalPrice = 0;         
    //网站价
    decimal SitePrice = 0;
    //市场价
    decimal MarkPrice = 0;
    //会员价
    decimal MemPrice = 0;
    //特价
    decimal SpecialPrice = 0;
    //节省价格
    decimal SavePrice = 0;  
    //小计价格
    decimal StatPrice = 0;      
    //市场总价
    decimal MarkTotalPrice = 0;
    //网站总价
    decimal SiteTotalPrice = 0;
    //会员总价
    decimal MemTotalPrice = 0; decimal strike = 0;
    ///最低单价
    decimal IntComparePri =0;
      

  12.   

    //总价
    decimal SpecialTotalPrice = 0;         
    //网站价
    decimal SitePrice = 0;
    //市场价
    decimal MarkPrice = 0;
    //会员价
    decimal MemPrice = 0;
    //特价
    decimal SpecialPrice = 0;
    //节省价格
    decimal SavePrice = 0;  
    //小计价格
    decimal StatPrice = 0;      
    //市场总价
    decimal MarkTotalPrice = 0;
    //网站总价
    decimal SiteTotalPrice = 0;
    //会员总价
    decimal MemTotalPrice = 0; decimal strike = 0;
    ///最低单价
    decimal IntComparePri =0;