c# - Gridview 标题卡住在母版页中不起作用

标签 c# javascript asp.net gridview

我需要在滚动时卡住 gridview 标题。所以我得到了一个在普通页面上工作的脚本。但是在使用母版页时,它就像一个带有滚动条的普通网格。我应该在脚本中更改什么以使其在母版页中工作。?

<script type="text/javascript" language="javascript">

            var GridId = "<%= GridView1.ClientID %>";
            var ScrollHeight = 300;
            window.onload = function () {
                var grid = document.getElementById(GridId);
                var gridWidth = grid.offsetWidth;
                var gridHeight = grid.offsetHeight;
                var headerCellWidths = new Array();
                for (var i = 0; i < grid.getElementsByTagName("TH").length; i++) {
                    headerCellWidths[i] = grid.getElementsByTagName("TH")[i].offsetWidth;
                }
                grid.parentNode.appendChild(document.createElement("div"));
                var parentDiv = grid.parentNode;

                var table = document.createElement("table");
                for (i = 0; i < grid.attributes.length; i++) {
                    if (grid.attributes[i].specified && grid.attributes[i].name != "id") {
                        table.setAttribute(grid.attributes[i].name, grid.attributes[i].value);
                    }
                }
                table.style.cssText = grid.style.cssText;
                table.style.width = gridWidth + "px";
                table.appendChild(document.createElement("tbody"));
                table.getElementsByTagName("tbody")[0].appendChild(grid.getElementsByTagName("TR")[0]);
                var cells = table.getElementsByTagName("TH");

                var gridRow = grid.getElementsByTagName("TR")[0];
                for (var i = 0; i < cells.length; i++) {
                    var width;
                    if (headerCellWidths[i] > gridRow.getElementsByTagName("TD")[i].offsetWidth) {
                        width = headerCellWidths[i];
                    }
                    else {
                        width = gridRow.getElementsByTagName("TD")[i].offsetWidth;
                    }
                    cells[i].style.width = parseInt(width - 3) + "px";
                    gridRow.getElementsByTagName("TD")[i].style.width = parseInt(width - 3) + "px";
                }
                parentDiv.removeChild(grid);

                var dummyHeader = document.createElement("div");
                dummyHeader.appendChild(table);
                parentDiv.appendChild(dummyHeader);
                var scrollableDiv = document.createElement("div");
                if (parseInt(gridHeight) > ScrollHeight) {
                    gridWidth = parseInt(gridWidth) + 17;
                }
                scrollableDiv.style.cssText = "overflow:auto;height:" + ScrollHeight + "px;width:" + gridWidth + "px";
                scrollableDiv.appendChild(grid);
                parentDiv.appendChild(scrollableDiv);
            }

    </script>


 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" >
            <Columns
                <asp:BoundField DataField="ContactName" HeaderText="Contact Name" />
                <asp:BoundField DataField="City" HeaderText="City" />
                <asp:BoundField DataField="Country" HeaderText="Country" />
            </Columns>
        </asp:GridView>

最佳答案

这可以使用 JQuery 来实现。对上述脚本稍作改动即可完成此操作。得到了输出。

//将下面的代码放在.js 文件中

 (function ($) {
        $.fn.Scrollable = function (options) {
            var defaults = {
                ScrollHeight: 300,
                Width: 0
            };
            var options = $.extend(defaults, options);
            return this.each(function () {
                var grid = $(this).get(0);
                var gridWidth = grid.offsetWidth;
                var headerCellWidths = new Array();
                for (var i = 0; i < grid.getElementsByTagName("TH").length; i++) {
                    headerCellWidths[i] = grid.getElementsByTagName("TH")[i].offsetWidth;
                }
                grid.parentNode.appendChild(document.createElement("div"));
                var parentDiv = grid.parentNode;

                var table = document.createElement("table");
                for (i = 0; i < grid.attributes.length; i++) {
                    if (grid.attributes[i].specified && grid.attributes[i].name != "id") {
                        table.setAttribute(grid.attributes[i].name, grid.attributes[i].value);
                    }
                }
                table.style.cssText = grid.style.cssText;
                table.style.width = gridWidth + "px";
                table.appendChild(document.createElement("tbody"));
                table.getElementsByTagName("tbody")[0].appendChild(grid.getElementsByTagName("TR")[0]);
                var cells = table.getElementsByTagName("TH");

                var gridRow = grid.getElementsByTagName("TR")[0];
                for (var i = 0; i < cells.length; i++) {
                    var width;
                    if (headerCellWidths[i] > gridRow.getElementsByTagName("TD")[i].offsetWidth) {
                        width = headerCellWidths[i];
                    }
                    else {
                        width = gridRow.getElementsByTagName("TD")[i].offsetWidth;
                    }
                    cells[i].style.width = parseInt(width - 3) + "px";
                    gridRow.getElementsByTagName("TD")[i].style.width = parseInt(width - 3) + "px";
                }
                parentDiv.removeChild(grid);

                var dummyHeader = document.createElement("div");
                dummyHeader.appendChild(table);
                parentDiv.appendChild(dummyHeader);
                if (options.Width > 0) {
                    gridWidth = options.Width;
                }
                var scrollableDiv = document.createElement("div");
                gridWidth = parseInt(gridWidth) + 17;
                scrollableDiv.style.cssText = "overflow:auto;height:" + options.ScrollHeight + "px;width:" + gridWidth + "px";            
                scrollableDiv.appendChild(grid);
                parentDiv.appendChild(scrollableDiv);
            });
        };
    })(jQuery);

//在页面中添加这一小段代码。

 <script type="text/javascript" language="javascript">
        $(document).ready(function () {
            $('#<%=this.grdDisplay.ClientID %>').Scrollable();
        }
            )
    </script>

关于c# - Gridview 标题卡住在母版页中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12002748/

相关文章:

从 C++ DLL 调用时,带有参数的 C# 委托(delegate)回调会导致 AccessViolation

c# - 如何在不使用 excel 互操作库的情况下将 excel 工作簿转换为 pdf?

c# - GDI+ 拖拽窗口到 UserControl 后的拖尾现象

javascript - 如何 "manually"(以编程方式)在古腾堡中插入一个 block ?

javascript - 如何使用 react 或 javascript 检查该类是否已添加到 div 元素?

c# - Zedgraph 以快速输入速率绘制实时图形

javascript - javascript函数的未定义函数错误

c# - 如何使我的 URL 自定义?

c# - 如何在我的项目之间共享母版页

asp.net - ajax 控制工具包模态弹出窗口显示在 div 位置后面固定