2012-03-07 56 views
0

私は自分のサイトにjqGridを実装しようとしています。一度ロードするとすべてうまく動作しますが、データをロードするために関数を再実行すると、それが更新されません。私がやったことは、テーブルを削除して、それを更新する前に再び追加したことです。これはMozillaで動作しましたが、IEで実行するとクラッシュします。ここに私が持っているコードはあります:jqGridが更新されない/クラッシュする

<div id="tabs-3"> 

        <table id="userStatistics" style="width:100%"> 

        </table><div id="pager1"></div> 

       </div> 

そして、グリッドを追加する関数です。

function generateSummaryStatistics(app, range) { 
/*$("#gbox_userStatistics").remove(); 
$("#pager1").remove();*/ 
$("#tabs-3").html('<table id="userStatistics" style="width:100%"></table><div id="pager1"></div>'); 
$("#userStatistics").jqGrid({ 
    url:"/WebServiceURL/GetLogMetricCountinputReportName="+app+"&startLogDate="+range, 
    datatype: 'xml', 
    mtype: 'GET', 
    colNames:['Date','User','Department','Application','Number Times Run'], 
     colModel: [{name:'logDate', index:'logDate',xmlmap:'logDate'}, 
     {name:'reportUserName', index:'reportUserName',xmlmap:'reportUserName'}, 
     {name:'departmentNumber', index:'departmentNumber',xmlmap:'departmentNumber'}, 
     {name:'reportName', index:'reportName',xmlmap:'reportName'}, 
     {name:'numOfQueries', index:'numOfQueries',xmlmap:'numOfQueries'}], 
      xmlReader: { 
        root:"returnList", 
        row:"UsageMetricsDTO", 
        repeatitems:false, 
        id : "departmentNumber" 
       }, 
       rowNum:10, 
       rowList:[10, 20, 30, 40, 50], 
       shrinkToFit:false, 
       viewrecords: true, 
       loadonce: true, 
       caption: 'Summary Statistics', 
       pager: $('#pager1'), 
       autoWidth:true, 
       multiselect:false, 
       gridview: true, 
       emptyrecords: "No records Found" 
      }).navGrid('#pager1',{edit:false,add:false,del:false}); 
$('.ui-jqgrid-bdiv').css({height: 'auto', 'max-height': 250}); 

} 

これが原因でIEがクラッシュする原因となります。

私はそれがMozillaでうまくいくと言いましたが、IEでもう一度実行するとクラッシュします。私はFirebugのコンソールでも、Eclipseコンソールでもエラーは見られません。

これを行うには誰でも助けてください。

おかげで、

クレイグ

答えて

2

私はなぜIEのクラッシュを確認していないが、あなたは少し、他の方法で同じ作業を行うことができ、すべてが問題なく動作するはずです。

まず、jqGridが<table>要素を超える追加のdivを作成することを理解することが重要です。 jqGridは特殊なメソッドGridUnloadを提供し、古いグリッドを破棄し、<table>の初期ページをページャ<div>に配置します。だからあなたはよく使うべきです

$("#userStatistics").jqGrid('GridUnload'); 

の代わりに$("#tabs-3").html(...);です。

多くの場合、別のグリッドを同じ場所に作成する必要がある場合にのみ、これを行う必要があります。たとえば、the answerthis oneでは、グリッドの列数が変更されます。そこで、このメソッドを使います。

あなたの場合、別のデータでグリッド本体をリロードするだけです。この場合は、のグリッドを作成するのは一度だけとなり、次回はurlを変更してグリッドの本体をリロードするだけです。 loadonce: trueを使用しているため、最初のグリッド・ロード後に'local'datatypeを変更することになります。したがってを元の'xml'値にリセットして、'url'をリセットする必要があります。対応するコードは

$("#userStatistics").jqGrid('setGridParam', { 
    url: newUrlValue, 
    datatype: 'xml' 
}).trigger("reloadGrid", [{page: 1}]); 
です
関連する問題