2012-02-17 63 views
0

我正在使用this tutorial来冻结GridView的页眉。我做了一切,如教程中所解释的,但在IE9中出现以下错误,我不知道为什么。GridView冻结页眉

错误: 线:182

Error: Unable to get value of the property 'offsetWidth': object is null or undefined

我在JavaScript代码中定义的GridView控件,如下所示:

<script type = "text/javascript"> 
    var GridId = "<%=GridView1 %>"; 
    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> 

那么,如何解决这个问题?

回答

2

你写的代码错误

而不是

var GridId = "<%=GridView1 %>"; 

更改为

var GridId = "<%=GridView1.ClientID %>"; //<= Check this 

当ASP.Net控件呈现其ID获取错位,并得到客户的错位符号如上所示。

希望这可以解决您的问题。

+0

好搭档伴侣。 – Dotnet 2012-02-17 15:35:50

+0

是的,你是对的。非常感谢您的帮助。顺便说一下,无论如何要有一个冷冻标题水平滚动?因为GridView Header的宽度现在是我放入其中的特定区域 – 2012-02-17 17:31:27

+0

调试'gridWidth'的值。这可能会帮助你。 – 2012-02-18 04:14:43