2012-02-17 14 views
0

私はthis tutorialを使用してGridViewのヘッダーをフリーズしています。私はチュートリアルで説明したようにすべてを行いましたが、私はIE9で次のエラーを受け取りました。理由はわかりません。GridView Freeze Header

エラー: ライン: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.ClientID %>"; //<= Check this 

ASP.Netコントロールがレンダリングされている場合は、そのIdが台無しに取得し、クライアント上のマングルさを得るために

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

変更したコードを書かれています表記は上記のとおりです。

これがあなたの問題を解決することを願っています。

+0

良いキャッチメイト。 – Dotnet

+0

ええ、そうです。ご助力ありがとうございます。ちなみに、このフリーズヘッダーで横スクロールするのはとにかくですか? GridViewのヘッダーの幅は、私が内部に置く特定の領域です。 –

+0

'gridWidth'の値をデバッグします。これはあなたを助けるかもしれません。 –