gridview表头固定(经验篇)
2015-07-13 18:20
567 查看
这里先介绍一下我的项目中遇到的一个问题,这个问题各种项目中也是用的最多的一个,那就是gridview的表头固定。就是我们往下拉内容的时候,我们还想同时看到表头对应的标题,不想反复上拉下拉去比对表格的表头和内容。同时网上在其他的地方也在不断的搜索这个知识。觉得有必要用一个经验篇章来记录一下,以免以后需要用到,同时,也想为大家解决一些东西。这其中肯定有雷同,有所雷同的地方,请大家不要喷我,也是学习总结的一种方式而已。
我就只讲述一下步骤吧:
1、首先在后端需要加上这样一句话:
if (!IsPostBack)
{
GridView1.Attributes.Add("style", "table-layout:fixed");
}
这句话是给id为GridView1的控件添加一个table-layout属性,设置该属性为“固定属性”。
2、整个过程采用gridview表头和表格内容分离的思想,下面假设有两个div,一个叫divTitle,一个叫divBody;Title我们用来存放gridview的表头,即HeaderText内容在这里显示,而divBody,就用来显示gridview的内容。那么具体,如何将表头和内容分离?下面用代码叙述。首先我先介绍一下网上大家能找到的方法:
(a)网上的脚本如下:
这个脚本到这里,也就差不多结束了,然后当然,需要对每一列,添加两个属性:
<itemstyle width=" ? px" />
<headerstyle width=" ? px " />
这两个属性中的?一定需要是一样的,否则会出问题,比如表头内容过小,显示不全等等问题。上述这些,对于表格并不怎么大的项目来说,其实也就差不多了,但是对于表,表格的列,将近有25~30个之多,这个时候,这样的做法,让我的额表头和内容对不上,产生了错位。我发现,如果仅仅是简单的把gridview原来的表头删除掉,留下表体,会出现标题和内容的错位。那么我解决的方法,是沿用了网络上的这个方法,加以自己改进了一些:
到此为止,其实可能并没有什么用。但是不着急,因为程序上的改进,也就到此为止了,剩下来的,我交给了css外部层叠样式表。我的gridview的cssClass为gdv以及header-cssClass为header:
请注意,这里
并没有把表头内容放在divTitle内。注意,其实不是没有放,放了,但是因为headGridView是通过cloneNode方法获得的一模一样的html,所以,继承了所有的css样式表,这个时候,我重新添加了一个样式,不过不改样式的名字,只改样式的归属:
我就只讲述一下步骤吧:
1、首先在后端需要加上这样一句话:
if (!IsPostBack)
{
GridView1.Attributes.Add("style", "table-layout:fixed");
}
这句话是给id为GridView1的控件添加一个table-layout属性,设置该属性为“固定属性”。
2、整个过程采用gridview表头和表格内容分离的思想,下面假设有两个div,一个叫divTitle,一个叫divBody;Title我们用来存放gridview的表头,即HeaderText内容在这里显示,而divBody,就用来显示gridview的内容。那么具体,如何将表头和内容分离?下面用代码叙述。首先我先介绍一下网上大家能找到的方法:
(a)网上的脚本如下:
<script type="text/javascript"> function init() { var bodyGridView = document.getElementById("<%=GridView1.ClientID%>");//根据gridview的id找到该控件,可以理解为gridview控件的实例化 var headGridView= bodyGridView.cloneNode(true); //将gridview下面的所有节点完完全全的copy到headgridview中,同时,继承了所有的css样式表,这句话很关键 var divTitle= document.getElementById("divTitle"); //实例化承载表头的div var divBody= document.getElementById("divBody"); //实例化承载内容的div for(var i = headGridView.rows.length -1;i > 0;i--) headGridView.deleteRow(i); //删掉数据行,这里headgridview只剩下表头的东西 bodyGridView.deleteRow(0); //删掉表头行,这样divBody中的表格就只剩下内容,从内容开始显示 divTitle.appendChild(headGridView); //将只剩下表头的headgridview放入divTitle的div中。 } window.onload = init; //在页面载入的函数上,实现init这个脚本 </script>
这个脚本到这里,也就差不多结束了,然后当然,需要对每一列,添加两个属性:
<itemstyle width=" ? px" />
<headerstyle width=" ? px " />
这两个属性中的?一定需要是一样的,否则会出问题,比如表头内容过小,显示不全等等问题。上述这些,对于表格并不怎么大的项目来说,其实也就差不多了,但是对于表,表格的列,将近有25~30个之多,这个时候,这样的做法,让我的额表头和内容对不上,产生了错位。我发现,如果仅仅是简单的把gridview原来的表头删除掉,留下表体,会出现标题和内容的错位。那么我解决的方法,是沿用了网络上的这个方法,加以自己改进了一些:
function init() { var bodyGridView = document.getElementById("<%=GridView1.ClientID%>"); var headGridView= bodyGridView.cloneNode(true); var divhead = document.getElementById("headdiv"); var divbody = document.getElementById("bodydiv"); divhead.appendChild(headGridView); /*************************************到此位置的东西都是和上面一样的,就不加注释了*****************************************/ divhead.style.width = divbody.clientWidth+'px'; divbody.style.height = document.body.clientHeight-100+'px'; //这两行是用来确定我的页面中两个div的高度的,如果不是有什么特殊需求,可以不写这两行。 } window.onload = init;
到此为止,其实可能并没有什么用。但是不着急,因为程序上的改进,也就到此为止了,剩下来的,我交给了css外部层叠样式表。我的gridview的cssClass为gdv以及header-cssClass为header:
.gdv { width:2000px; height:16px; text-align:center; background-color:White; margin-top:-40px; font:normal normal normal 14px/16px 宋体,Arial,幼圆; display:table; } .header { border:1px solid lightblue; height:40px; line-height:40px; }注意gdv中的margin-top和header中的height属性,是比较重要的,我的方法不是删除第一行,而是第一行上移,那么这样就能保持第一行依然存在,这样,就不会造成标题和内容错位了,但是又随之而来一个问题,
请注意,这里
divTitle.appendChild(headGridView);
并没有把表头内容放在divTitle内。注意,其实不是没有放,放了,但是因为headGridView是通过cloneNode方法获得的一模一样的html,所以,继承了所有的css样式表,这个时候,我重新添加了一个样式,不过不改样式的名字,只改样式的归属:
#divTitle.gdv { margin-top:0px; }这样,就将原来缩上去的表头在id为divTitle的div内,拉下来显示在界面中。这样也就将表头和表体完美的分离开来了。同时,希望大家能提出不一样的,更为简洁的方法,共同进步!如果有哪里写错了,请大家原谅。疯狂码代码中。
相关文章推荐
- Web布局连载——两栏固定布局(五)
- [div+css]晒晒最新制作专题推广页模板
- c#调用COM组件
- 纯CSS制作的新闻网站中的文章列表
- 10条影响CSS渲染速度的写法与使用建议第1/3页
- BS项目中的CSS架构_仅加载自己需要的CSS
- 很不错的 CSS Hack 又学了一招
- 发一个css比较清爽的写法
- CSS expression控制图片自动缩放效果代码[兼容 IE,Firefox]
- css布局网页水平居中常用方法
- CSS经典技巧十则第1/2页
- css 兼容性问题this.style.cursor=''hand''
- IE6不能正常解析CSS文件问题的解决方法及原因分析
- 欲练CSS ,必先解决IE的一些细节分析
- CSS文字截取功能实现代码
- 支持IE6 IE7 Firefox 的纯CSS的下拉菜单
- 不同版本IE使用不同css(css条件注释语句用法)
- C#实现把指定数据写入串口
- css类选择器的使用方法详解
- C#中抽象方法与虚拟方法的区别