GridView 表头固定的一种实现方法

早晨来公司收到了原部长发来的邮件,一个 .Net 项目遇到了 GridView 不能满足物理设计的问题,让我帮忙看看。通过电话和 PM 了解一下情况,是要实现表头固定的效果,有可能需要纵横两个方面的滚动条。

GridView 先天不足,如果使用自己画表头,这样做 UI 的时间太长了,于是 google 了一下。net_lover 给出了一套解决方法,他的文章当中没有对原理进行说明,我就说说自己的理解和想法吧。

老孟的实现方法,是定义了两个 DIV,上面的 DIV 用来显示表头(HTML 1~2 行),下面的 DIV 用来显示表体(HTML 3~8 行),通过设置 CSS 实现滚动条的效果。在页面加载时,通过 JavaScript 将 GridView 的内容 Clone 一份,再将 Clone 后的节点添加到表头的 DIV 当中,这样是为了使外观风格一致。最关键的一步是,删除表头的 DIV 中除第一行以外的全部 Node(JavaScript 7~10 行),删除表体 DIV 的第一行(JavaScript 12 行)。

这样作的确很方便,但是,如果 GridView 的数据量很大,页面加载的时间将非常长。我们首先要 Clone 全部的节点,然后再删除 N-1 个节点,太废时了。

以下是我调整风格后的代码片段,为了增加阅读性而已。

1None.gif<div id="divGridViewHeader">
2None.gif</div>
3None.gif<div id="divGridViewBody" style="overflow-y: scroll; height: 200px; width: 580px;">
4None.gif  <asp:GridView ID="gvScrollDemo" runat="server" Font-Size="12px" BackColor="#FFFFFF"
5None.gif    GridLines="Both" CellPadding="4" Width="560">
6None.gif    <HeaderStyle BackColor="#EDEDED" Height="26px" />
7None.gif  </asp:GridView>
8None.gif</div>

 1None.giffunction  initGridView()
 2ExpandedBlockStart.gifContractedBlock.gifdot.gif
{
 3InBlock.gif    var tbBody = document.getElementById("<%= gvScrollDemo.ClientID %>"
);
 4InBlock.gif    var tbHeader = tbBody.cloneNode(true
);
 5InBlock.gif    var divHeader = document.getElementById("divGridViewHeader"
);
 6
InBlock.gif
 7InBlock.gif    for(i = tbHeader.rows.length -1; i > 0;i--
)
 8ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif
{
 9
InBlock.gif        tbHeader.deleteRow(i)
10ExpandedSubBlockEnd.gif    }

11InBlock.gif
12InBlock.gif    tbBody.deleteRow(0
)
13
InBlock.gif    divHeader.appendChild(tbHeader)
14ExpandedBlockEnd.gif}

转载于:https://www.cnblogs.com/gucsnet/archive/2007/07/12/814919.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值