zoukankan      html  css  js  c++  java
  • 扩展gridview轻松实现冻结行和列

    在实际的项目中,由于项目的需要,数据量比较大,同时显示栏位也比较多,要做gridview里显示完整,并做到用户体验比较好,这就需要冻结表头和关键列.由于用到的地方比较多,我们可以护展一个gridview,使其简单设置就能达到目的. 下面是我写的一个扩展gridview的一个工程和简单例子.主要的设置属性是红色框框内的.

    下面,我们再看一下前台的文件设置, 这里要注意删掉<DOCTYPE type> 这一行,否则不起作用.

    运行得到以下结果.红色线是冻结分界线,对照以下两张图片,可以看到效果.

    没错,前台只需要这么简单的设置就可以了, 因为把CSS和JS的代码放到后台去构造了.实际上写在前台也是一样,但这样不方便后续使用.之所以写到后台,因为后续可封装这个类, 引用该类后只需设置一下属性就能轻松达到目的. 下面是CSS和JS的代码,如仍有不明白的地方.可以留言. 其实可以把这个gridview扩展更多的功能以便用到后续的项目中,(如增加分页,内容导出xls或pdf,还有checkbox之类全选的,或者右键菜单之类的,请看续编),以便达到代码少,设置简单,开发速度快的目的.

    <script language=javascript>
                    
                         function FreezeGridColumns(dgTbl, colNo) 
                        {                                
                             var tbl = document.getElementById(dgTbl);
                             for ( var i=0; i<tbl.rows.length; i++)
                             {
                                 for ( var j=0; j<colNo; j++) 
                                 { 
                                     tbl.rows[i].cells[j].className = 'locked'; 
                                 } 
                             }                 
                         } 
                    
    </script>
                          <style TYPE='text/css'> 
                        /* Locks table header */
                        th 
                        {                     
                            /* border-right: 1px solid silver; */ 
                            position:relative;
                            cursor: default;
                            /*IE5+ only*/ 
                            top: expression(this.parentElement.offsetParent.offsetParent.scrollTop-2);
                            z-index: 10;    
                        }
                        TR.GridNormal TH, TR.GridAlternate TH
                        {
                            text-align:left;
                        }
                        TR.GridHeader TH
                        {
                            text-align:center;
                        }                    
                            
                        /* Locks the left column */ 
                        td.locked, th.locked 
                        {                     
                            /* border-right: 1px solid silver; */ 
                            position:relative; 
                            cursor: default; 
                            /*IE5+ only*/    
                            left: expression(this.parentElement.offsetParent.offsetParent.scrollLeft-2);    
                        } 
                        
                        /* Keeps the header as the top most item. Important for top left item*/ 
                        th.locked {z-index: 99;} 
                        </style> 
                        <style>
                        /*Overriding Grid Styles*/
                        .Grid
                        {
                            border:0;
                            background-color:red;    
                        }
                        .GridHeader
                        {
                            background-color: #547095;
                            color:White;
                            font-weight:bold;
                            font-family:Tahoma;
                            text-align:center;    
                            padding : 1px 0px 1px 0px;
                            font-size:8pt;        
                        }
                        .GridHeader TD A, TH A
                        {
                            text-decoration:none;
                            color:White;
                        }
                        .GridNormal
                        {
                            background-color: #FFFFFF;
                            font-weight: normal;
                            font: x-small Verdana;
                        }
                        .GridAlternate
                        {
                            background-color: #EFF8FC;
                            font-weight: normal;
                            font: x-small Verdana;
                        }
                        .GridSelected
                        {
                            background-color: #FFC082;
                            font-weight: normal;
                            font: x-small Verdana;
                        }
                        .GridPager
                        {
                            background-color : White;
                            font-size : x-small;
                        }
                        </style>
    
    <script language=javascript>
    
                    // trims the height of the div surrounding the results table
                    // so that if a not a lot of results are returned,
                    // you dont have a lot of blank space between the results and
                    // the last buttons on the page
                    var divTbl = document.getElementById('div_CustomDataGrid1');
                    var resultsTable = divTbl.children[0];
                    if ( typeof(resultsTable) != 'undefined' )
                    {
                    //alert( 'div ' + divTbl.offsetHeight + ' results: ' +  resultsTable.offsetHeight );
                    if( divTbl.offsetHeight + 3 > resultsTable.offsetHeight ) 
                        divTbl.style.height = resultsTable.offsetHeight + 50;
                    }
                    
    </script>
    <
    script language=javascript>     FreezeGridColumns('CustomDataGrid1',3); </script>

    效果还是满不错的.

  • 相关阅读:
    CSS媒体查询
    搜索关键词标注红色
    揭秘 | 小白如何0基础0元建站
    细说浏览器输入URL后发生了什么
    js问题总结
    vue elementui如何修改el-table头部样式
    h5开发微信公众号重定向到关注页面没有关注按钮 (微信你个坑)
    下拉展开动画
    html中常用的转义字符总结
    9个设计师常用的高清图库 不敢配图? 这9个免版权图库牢记心中!
  • 原文地址:https://www.cnblogs.com/Geton/p/4060651.html
Copyright © 2011-2022 走看看