(转)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 个节点,太废时了。
以下是我调整风格后的代码片段,为了增加阅读性而已。
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 个节点,太废时了。
以下是我调整风格后的代码片段,为了增加阅读性而已。
1
<div id="divGridViewHeader">
2
</div>
3
<div id="divGridViewBody" style="overflow-y: scroll; height: 200px; width: 580px;">
4
<asp:GridView ID="gvScrollDemo" runat="server" Font-Size="12px" BackColor="#FFFFFF"
5
GridLines="Both" CellPadding="4" Width="560">
6
<HeaderStyle BackColor="#EDEDED" Height="26px" />
7
</asp:GridView>
8
</div>
<div id="divGridViewHeader">2
</div>3
<div id="divGridViewBody" style="overflow-y: scroll; height: 200px; width: 580px;">4
<asp:GridView ID="gvScrollDemo" runat="server" Font-Size="12px" BackColor="#FFFFFF"5
GridLines="Both" CellPadding="4" Width="560">6
<HeaderStyle BackColor="#EDEDED" Height="26px" />7
</asp:GridView>8
</div> 1
function initGridView()
2
{
3
var tbBody = document.getElementById("<%= gvScrollDemo.ClientID %>");
4
var tbHeader = tbBody.cloneNode(true);
5
var divHeader = document.getElementById("divGridViewHeader");
6
7
for(i = tbHeader.rows.length -1; i > 0;i--)
8
{
9
tbHeader.deleteRow(i)
10
}
11
12
tbBody.deleteRow(0)
13
divHeader.appendChild(tbHeader)
14
}
function initGridView()2
{3
var tbBody = document.getElementById("<%= gvScrollDemo.ClientID %>");4
var tbHeader = tbBody.cloneNode(true);5
var divHeader = document.getElementById("divGridViewHeader");6

7
for(i = tbHeader.rows.length -1; i > 0;i--)8
{9
tbHeader.deleteRow(i)10
}11

12
tbBody.deleteRow(0)13
divHeader.appendChild(tbHeader)14
}
孟老大的链接地址(创建表头固定,表体可滚动的GridView):
http://dotnet.aspx.cc/article/7919da6b-9014-41c2-b9b6-10e5ec047f7d/read.aspx

浙公网安备 33010602011771号