3

私はjqGridを持っていて、アイテムのいくつかのページがあります。1ページ目にあるか、他のページのどこかに埋め込まれている可能性のある行のIDがあります。

行のIDを指定して、そのような行をプログラムで選択するにはどうすればよいですか?ボタンのクリックイベントを次のように使用しています

.on("click", function(){
     var myId = $(this).attr("id");
     $("#studentGrid").jqGrid.setSelection(myId, true);
});

ボタンをクリックすると、次のファイアバグコンソールが表示されます。

TypeError:this.eachは関数ではありません

何か案は ?

編集
それで、私はグリッドに1つのレコードだけを再配置することを選択しました。問題は、ローカルデータを使用していないことです。私のデータ型は「json」です。このような

  $("#studentGrid").jqGrid({
                url: '<c:url value="/students/studentjsondata"/>',
                datatype: 'json',
                height: 'auto',
                colNames:['id','First Name', 'Last Name', 'Other Name' ,'Date Of Birth', 'Gender'], 
                colModel:[ 
                        //Bla Bla Bla
                ],
                rowNum:10,
                autowidth: true,
                pager: '#pager', 
                sortname: 'id', 
                viewrecords: true, 
                sortorder: "desc",
                caption:"Students",
                emptyrecords: "Empty Records",
                subGrid: true,
                /* <![CDATA[ */ 
                onSelectRow: function(id){ 
                    if((lastsel != 0)&&(id!==lastsel)){ 
                        $("#studentGrid").jqGrid('collapseSubGridRow', lastsel);                
                    } 
                    lastsel=id; 
                }/* ]]> */ ,
                subGridOptions: { 
                    "plusicon" : "ui-icon-triangle-1-e", 
                    "minusicon" : "ui-icon-triangle-1-s", 
                    "openicon" : "ui-icon-arrowreturn-1-e", 
                    "reloadOnExpand" : true, 
                    "selectOnExpand" : true  
                },
                subGridRowExpanded: function(subgrid_id, row_id) {
                    //Bla Bla Bla
                }
    });

グリッドに再入力したいjson文字列があります。この新しいデータでグリッドを再初期化するにはどうすればよいですか。次のjson文字列と、対応するロジックは次のとおりですが、何も起こりません。

{'page':'1', 'records':'1', 'total':'1', 'rows':[{'id':'7385', 'cell': ['Max', 'Payne', '', 'September 16, 2012', 'Male']}]}


.on("click", function(){
  var myNewData = eval('(' + $(this).attr("griddata") + ')');
  $("#studentGrid").jqGrid('setGridParam', { datatype: 'local', data: myNewData}).trigger('reloadGrid');
 });    
4

4 に答える 4

3

グリッドsetSelection内に call メソッドloadCompleteを追加してみることができます:$("#studentGrid")

loadComplete: function () {
    $(this).jqGrid("setSelection", myId, true);
}

と等しい ID を持つ行myIdが現在のページにない場合、行は選択されません。id = の行myIdが現在のページにある場合、その行が選択されます。それはあなたが望むものですか?

于 2012-09-13T17:02:12.433 に答える
0

私はちょうどここで推測しています -

  1. 選択する必要があるもののIDをすでに持っている場合は、それをメモリに保持してみませんか? それとも、Cookie や HTML5 の locaStorage でしょうか?

  2. 次に、これらの値を使用して、関連する行が現在のページに表示されるときに、選択した行を設定します。

  3. ページリクエスト間で「選択したID」をいつでもシリアル化できます(ajaxを使用していない場合)

于 2012-09-13T15:55:50.810 に答える
0

現在のページにある行のみを選択できます。

選択した行を配列(または他のデータ構造)に保存し、ページを変更するときに「選択した」行を選択できます-この回答が役立ちます:jqGrid:異なるページで複数選択を使用する方法

または、要件に応じて、提案したことを実行して、その 1 行のみを表示することもできます。

于 2012-09-13T14:41:07.617 に答える
-1

皆さん、コメントありがとうございます。彼らは私をこの答えに導きました。このリンクも非常に役に立ちました。これは、json 文字列を使用して非ローカル データを更新するためのコードです。

.on("click", function(){
    $("#studentGrid").jqGrid('setGridParam', { jsonReader: { repeatitems: false }, datatype: 'jsonstring', datastr: $(this).attr("griddata")}).trigger('reloadGrid');
});

それが他の誰かに役立つことを願っています。あとは、これらのパラメーターを削除してグリッドを適切に再読み込みする方法を見つけ出すだけです。これは、次のようにデフォルトの jsonReader を使用して実現されます。

$("#studentGrid").jqGrid('setGridParam', {    jsonReader : {
root: "rows",
page: "page",
total: "total",
records: "records",
repeatitems: true,
cell: "cell",
id: "id",
userdata: "userdata",
subgrid: {root:"rows", 
repeatitems: true, 
cell:"cell"
 }
} , datatype: 'json', datastr: null});
于 2012-09-13T20:19:48.843 に答える