web-dev-qa-db-ja.com

ローカルデータを更新するjqGrid(JSONオブジェクト)

私はローカルデータで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を使用しています。

23
Koobz

簡単に使用できます:

jQuery("#list")
    .jqGrid('setGridParam',
        { 
            datatype: 'local',
            data:mydata
        })
    .trigger("reloadGrid");
31
Ved

同様のことを達成できました。私の問題の秘Theは、データグリッドパラメーターを更新する前にデータを消去することでした。グリッドが他の場所で初期化されていると仮定すると(データ型: 'local')、試してください:

function refreshGrid($grid, results) {
    $grid.jqGrid('clearGridData')
        .jqGrid('setGridParam', { data: results })
        .trigger('reloadGrid', [{ page: 1}]);
}
23
Megan

質問1:

クライアント側のデータを使用してグリッドのページャーを定義した場合、ページャーのボタンは自動的に無効になります。つまり、現在のリリースのグリッドは、クライアント側のページングと検索をサポートしていません。

ローカルデータ

質問2:試しましたか:

_ $("#list").GridUnload();
_

gridUnload()trigger('reloadGrid')の違いについては、 here を参照してください。

7
bruno

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");

追伸グリッドからすべてのデータを取得する方法に関するリンクを参照してください グリッドのコンテンツの取得

6
WayFarer

既存のグリッドでデータを更新する場合、次のように機能します。

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()その後は何もしません。

5
zishan

ローカルデータを使用している場合は、jsonjqGridでローカルsetGridParamデータを指定する必要がありますプロパティ

 jQuery("#list")
        .jqGrid('setGridParam', {
        datatype: 'local',
        data:results //json object
    });

リロードjqgridには、次を使用できます。

 jQuery("#list").trigger("reloadGrid");
0
Dulith De Costa