GridView固定表头的2种方法

做项目的时候,有时候需要实现GridView的表头固定效果,不随滚动条的拖动而被隐藏。

通常的实现方法主要分2种,这里总结一下以作备用:

一、 JavaScript调用实现:

  1.引用 相关JavaScript 和 CSS 文件:

  <script type="text/javascript" src="superTables.js"></script>
  <link href="superTables_Default.css" rel="Stylesheet" type="text/css" />

  2. 添加自定义的 CSS 样式:

<style type="text/css">
         .gridcell
{ padding:5px;}
         
         .fakeContainer 
{
            float
: left;
            margin
: 5px; 
            border
: solid 1px #ccc;
            width
: 630px;
            height
: 250px;
            background-color
: #ffffff;
            overflow
: hidden;
        
}
    </style>

 

  3.在 GridView 网格控件的下面添加 JavaScript 控制代码:

<script type="text/javascript">
var grid = document.getElementById("grid_Report");

if(grid != null && grid != undefined){
   grid.parentNode.className = "fakeContainer";
(function() {
    var start = new Date();
    superTable("grid_Report", {
        cssSkin : "Default",
       fixedCols : 1,
       onFinish : function () 
       {       
            if (this.fixedCols == 0) 

            {
                for (var i=0, j=this.sDataTable.tBodies[0].rows.length; i<j; i++) 
                {
                    this.sDataTable.tBodies[0].rows[i].onclick = function (i) 
                    {
                        var clicked = false;
                        var dataRow = this.sDataTable.tBodies[0].rows[i];
                        
                        return function () 
                        {
                            if (clicked) 
                            {
                                dataRow.style.backgroundColor = "#ffffff";
                                clicked = false;
                            }
                            else 
                            {
                                dataRow.style.backgroundColor = "#eeeeee";
                                clicked = true;
                            }
                        }
                    }.call(this, i);
                }
            }
            else 
            {
                for (var i=0, j=this.sDataTable.tBodies[0].rows.length; i<j; i++) 
                {
                    if(i % 2 == 0){

                      this.sDataTable.tBodies[0].rows[i].style.backgroundColor = "#f5ffef";
                    }
                    if(i >=(j - 2)){
                      this.sDataTable.tBodies[0].rows[i].style.backgroundColor ="#eeeeee";//"#ffffd2";
                    }
                   
                    this.sDataTable.tBodies[0].rows[i].onclick = this.sFDataTable.tBodies[0].rows[i].onclick = function (i) 
                    {
                        var clicked = false;
                        var dataRow = this.sDataTable.tBodies[0].rows[i];
                        var fixedRow = this.sFDataTable.tBodies[0].rows[i];
                        return function () 

                        {
                            if (clicked) 
                            {
                                clicked = false;

                            }
                            else 
                            {
                                clicked = true;

                            }
                        }
                    }.call(this, i);
                }
            }           
            return this;
       }
    });
})();
}
</script>

二、CSS控制实现:

1.样式代码:

<style type="text/css"> 
.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>

2.将GridView包含在具滚动条的DIV中

<div style="overflow-y: scroll; height: 200px;width:300px" id="dvBody">

    <asp:GridView ID="GridView1" .......

    </asp:GridView>
</div>

3.给GridView的表头属性HeaderStyle”设置样式

<HeaderStyle CssClass="Freezing"/>

个人感觉着2种方法各有优缺点,JS控制最终效果比较理想,表头、指定列均可设固定,但是JS代码稍显复杂,如果想要增加自定义效果,仍然需要改进。

而CSS控制比较简单易用,利于代码精简。

posted on 2013-08-01 00:10  lmx22  阅读(2027)  评论(0编辑  收藏  举报

导航