私はローカルデータでjqGridを使用しようとしていますが、いくつかの問題が見つかりました:
私はそのようなものを初期化しています:
_function refreshGrid($grid, results)
{
$grid.jqGrid({
data: results,
datatype: "local",
colNames:['#','File', 'Category', 'Line Number', 'Message Text','Detailed'],
colModel:[
{name:'count',index:'count', width:100, resizable: true},
{name:'basename',index:'basename', width:100, resizable: true, classes:['basename']},
{name:'category',index:'category', width:60, resizable: true},
{name:'linenumber',index:'linenumber', width:60, resizable: true},
{name:'text',index:'text',width:400, resizable: true},
{name:'detailed',index:'detailed',width:100,classes:['detailed'], resizable: true }
],
viewrecords: true,
rowNum:100,
rowList:[100,200],
pager: '#debug_errors_pager',
caption:"JSON Example"
});
}
_
私が渡すデータ、results
はオブジェクトの配列です。
問題点:
1)ページャーは完全にオフです。正しい数を表示しますが、実際にページをめくることができません。
2)データを更新できません。 results
に到達するために、独自の検索機能を使用しています。既存のデータを更新する方法がわかりません。グリッドは最初に初期化されます。その後の試行では、空のテーブルに初期化されます。
3)私は次のようなことを試しました:
$grid.empty()
-$ gridオブジェクトはjqgridによって装飾されているため機能しません。古いグリッドを「破棄」して、回避策として単純に再レンダリングしようとしています。 `$ grid.trigger( 'reloadGrid')-動作しません。理由はわかりません。
注:これはjQGrid 3.7を使用しています。
簡単に使用できます:
jQuery("#list")
.jqGrid('setGridParam',
{
datatype: 'local',
data:mydata
})
.trigger("reloadGrid");
同様のことを達成できました。私の問題の秘Theは、データグリッドパラメーターを更新する前にデータを消去することでした。グリッドが他の場所で初期化されていると仮定すると(データ型: 'local')、試してください:
function refreshGrid($grid, results) {
$grid.jqGrid('clearGridData')
.jqGrid('setGridParam', { data: results })
.trigger('reloadGrid', [{ page: 1}]);
}
JqGridのローカルデータを更新するための適切な文書化された方法が見つかりませんでした。問題を解決するためにjqGridを拡張した方法は次のとおりです。
$.extend($.fn.jqGrid, { setData: function(data) {
this[0].p.data = data;
return true;
} } );
この後、以下を実行してjqGridを新しいデータで更新できます。
グリッドが次のように宣言されているとします:
jQuery("#list").jqGrid({ datatype: "local", ... other params ... });
その後、次のことができます:
jQuery("#list").jqGrid('setData', array_with_new_data);
jQuery("#list").trigger("reloadGrid");
追伸グリッドからすべてのデータを取得する方法に関するリンクを参照してください グリッドのコンテンツの取得
既存のグリッドでデータを更新する場合、次のように機能します。
var gridData = [...];
var grid = jQuery('#gridId');
grid.jqGrid('clearGridData');
if( grid.get(0).p.treeGrid ) {
grid.get(0).addJSONData({
total: 1,
page: 1,
records: gridData.length,
rows: gridData
});
}
else {
grid.jqGrid('setGridParam', {
datatype: 'local',
data: gridData,
rowNum: gridData.length
});
}
grid.trigger('reloadGrid');
ReloadGrid()がpopulate()を呼び出し、populate()がaddLocalData()を呼び出し、戻り値をaddJSONData()に渡すため、この方法で行う必要がありましたが、treeGrid == trueの場合、addLocalData()は何も返さず、addJSONData()その後は何もしません。
ローカルデータを使用している場合は、json
のjqGrid
でローカルsetGridParam
データを指定する必要がありますプロパティ
jQuery("#list")
.jqGrid('setGridParam', {
datatype: 'local',
data:results //json object
});
リロードjqgrid
には、次を使用できます。
jQuery("#list").trigger("reloadGrid");