admin管理员组文章数量:1319010
I had fixed GridView header and while i scroll down headers will be constant but the problem is headers are not in proper format. Like all the column headers are shrinked and wont display under particular column . I tried many things but nothing was useful. Clearly saing header width is not equal to column. I have used JavaScript code for Scrolling and also CssClass for Fixing.
Please find the solution for me
JavaScript Code
<script type = "text/javascript">
var GridId = "<%=GridViewLeaveHistory.ClientID %>";
var ScrollHeight = 300;
var ScrollWidth = 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" + ScrollWidth;
scrollableDiv.appendChild(grid);
parentDiv.appendChild(scrollableDiv);
}
Css Class
.Freezing
{
position: relative;
top: expression(this.offsetParent.scrollTop-1);
z-index: 10;
}
GridView Code
<div style="width: 810px; height: 259px;">
<asp:GridView ID="GridViewLeaveHistory" runat="server" AllowSorting="True"
AutoGenerateColumns="False" BackColor="White" BorderColor="#0061C1"
BorderStyle="None" CaptionAlign="Bottom" EmptyDataText="No Records Found"
Font-Names="Verdana" Font-Size="X-Small" ForeColor="#0061C1" Height="18px"
OnRowCommand="GridViewLeaveHistory_RowCommand"
OnRowDataBound="GridViewLeaveHistory_RowDataBound" CssClass="Freezing"
OnSelectedIndexChanged="GridViewLeaveHistory_SelectedIndexChanged"
ShowFooter="True" ShowHeaderWhenEmpty="True" width="801px">
I had fixed GridView header and while i scroll down headers will be constant but the problem is headers are not in proper format. Like all the column headers are shrinked and wont display under particular column . I tried many things but nothing was useful. Clearly saing header width is not equal to column. I have used JavaScript code for Scrolling and also CssClass for Fixing.
Please find the solution for me
JavaScript Code
<script type = "text/javascript">
var GridId = "<%=GridViewLeaveHistory.ClientID %>";
var ScrollHeight = 300;
var ScrollWidth = 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" + ScrollWidth;
scrollableDiv.appendChild(grid);
parentDiv.appendChild(scrollableDiv);
}
Css Class
.Freezing
{
position: relative;
top: expression(this.offsetParent.scrollTop-1);
z-index: 10;
}
GridView Code
<div style="width: 810px; height: 259px;">
<asp:GridView ID="GridViewLeaveHistory" runat="server" AllowSorting="True"
AutoGenerateColumns="False" BackColor="White" BorderColor="#0061C1"
BorderStyle="None" CaptionAlign="Bottom" EmptyDataText="No Records Found"
Font-Names="Verdana" Font-Size="X-Small" ForeColor="#0061C1" Height="18px"
OnRowCommand="GridViewLeaveHistory_RowCommand"
OnRowDataBound="GridViewLeaveHistory_RowDataBound" CssClass="Freezing"
OnSelectedIndexChanged="GridViewLeaveHistory_SelectedIndexChanged"
ShowFooter="True" ShowHeaderWhenEmpty="True" width="801px">
Share
Improve this question
asked Aug 1, 2013 at 9:39
SurajSuraj
4943 gold badges10 silver badges23 bronze badges
2 Answers
Reset to default 1looks overly plex for a fixing a header, just toggle some classes around the element, or maybe I'm not understanding your question right...
<style>
// position: relative on the parent you want to fix to
.table-responsive {
position: relative;
padding: 20px // maybe some padding to avoid overlapping the first row
}
// when you want the header to fix just apply the class
// if you want it fixed to the top of the document change absolute to fixed
.table-header {
position: absolute;
top: 0;
left: 0;
}
</style>
<!-- Fixed Grid header Script-->
<script type="text/javascript">
$(document).ready(function () {
var gridHeader = $('#<%=GrdMWRFinal.ClientID%>').clone(true); // Here Clone Copy of Gridview with style
$(gridHeader).find("tr:gt(0)").remove(); // Here remove all rows except first row (header row)
$('#<%=GrdMWRFinal.ClientID%> tr th').each(function (i) {
// Here Set Width of each th from gridview to new table(clone table) th
$("th:nth-child(" + (i + 1) + ")", gridHeader).css('width', ($(this).width()).toString() + "px");
});
$("#GHead1").append(gridHeader);
$('#GHead1').css('position', 'top');
$('#GHead1').css('top', $('#<%=GrdMWRFinal.ClientID%>').offset().top);
});
</script>
<!-- Fixed Grid header Script-->
<div id="divGridViewScroll1" style="height: 500px; overflow: scroll">
<div class="table-responsive">
<asp:GridView ID="grdEmpValidations" runat="server" CssClass="table table-small-font table-bordered table-striped">
<Columns>
</Columns>
<HeaderStyle HorizontalAlign="Justify" VerticalAlign="Top"
Font-Bold="true" />
<RowStyle Font-Size="Small" Height="1" ForeColor="#000000" />
</asp:GridView>
本文标签: cfixing gridview header while scrollingStack Overflow
版权声明:本文标题:c# - fixing gridview header while scrolling - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742052736a2418138.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论