2016-04-26 17 views
1

グリッドのキーフィールドとして注文番号を使用するjqGridがあります。ユーザーはページ上のテキストボックスに注文番号を入力することができ、グリッドを「検索」して、入力された値がグリッドのいずれかの行と一致するかどうかを確認する必要があります。グリッド行を選択したい場合は、グリッド行を選択したい場合は、そのキーをページの別の場所の非表示フィールドにダンプします。値がjqGridのデータの任意のキーと一致するかどうかを識別する適切な方法は何ですか?

グリッドによって生成されたテーブルを検索することで、これを行う方法が1つしかないようです。

しかし、この方法では、グリッドデータの全体ではなく、グリッドの現在のページだけを検索します(感謝のページ付け)。だから私は、setSelectionメソッドを呼び出して、渡されたキーがjqGridに見つからなかったかどうかを知ることができると考えました。

$(this).jqGrid('setSelection', idOfSelectedRow); 

が、setSelectionメソッドを呼び出す(ドキュメントで説明したように、それは私の悪かった)渡されたIDが見つからない場合であっても、全体のjQueryオブジェクトを返します。

これは私が固執している場所です。私はキーを探しているグリッドのデータ全体を検索できる必要があります。必要に応じて、私の実装にもっと詳しく説明することができます。

答えて

0

だから、ドキュメントを掘り下げた後、私はより良い方法を見つけたと信じています。

var orderNum = $('#tbUserInput').val(); 
var gridData = $('#GridData').jqGrid('getGridParam', 'data'); 
var gridDataRow = $.grep(gridData, function (e) { return e._id_ == orderNum; }); 

    if (gridDataRow.length > 0) { 
     var selRowIds = $('#GridData').jqGrid("getGridParam", "selarrrow"); 
     if ($.inArray(gridDataRow[0]._id_, selRowIds) < 0) { 
      $('#GridData').jqGrid('setSelection', gridDataRow[0]._id_, true); 
     } 
    } 
    else { 
     AddSelectedOrder(orderNum, $('[id*=hfSelectedOrders]')); 
    } 

まず、私は、グリッドのパラメータから全体jqGridデータオブジェクトを取得し、ユーザーの入力をつかんだ(今日の前にこれについて知っていたことはありません)。その後、.grepを使用して、グリッドデータ配列内でid ==ユーザー入力を持つオブジェクトを検索することにしました。 grepが成功したと仮定すると、gridDataRowはゼロ以外の長さを持ちます(そして、注文番号はjqgridのキーフィールドなので、長さは常に1、それ以上ではないと仮定してOKです)。

次に、グリッドから直接selectedRowIdsの配列を取得しています(このグリッドには複数選択があります)。グリッドデータのIDがselectedRows配列に見つからない場合は、jqGridsのsetSelectionをトリガしてその行を選択します。

最後のelseブロックは、単純に非表示フィールドに注文番号を追加します。

と思われます。他の誰かがこの問題に遭遇したら、私はこれが助けてくれることを願う!

編集ちょうどノート、私は行が選択されていないかどうかを確認するために 場合($ .inArray(gridDataRow [0]。ID、selRowIds)を< 0) チェックを持っています。それは私がそれを選択解除したくない場合(顧客は、このように動作するように頼んだ)。このコードを使用すると、そのIFチェックを削除し、setSelectionを呼び出してその行の選択を切り替えることができます。

関連する問題