2011-01-21 10 views
7

私はASP.NET MVC 3ページを持っています。その上に、私はajax呼び出しからのJSONデータを使ってjqGridに変換するテーブルを持っています。グリッドは次のように設定されています。jqGridフィルターまたは日付で検索クライアント側が動作しない

myGrid = $('#myGrid'); 
myGrid.jqGrid({ 
    caption: 'My Grid', 
    datatype: 'local', 
    data: data.rows, 
    height: 250, 
    pager: '#myPager', 
    viewrecords: true, 
    colModel: [ 
     ..., 
     { 
      label: 'blah', 
      name: 'blah', 
      align: 'left', 
      sortable: true, 
      editable: false, 
      width: 85, 
      formatter: 'date', 
      sorttype: 'date', 
      datefmt: 'm/d/Y', 
      formatoptions: { srcformat: 'm/d/Y', newformat: 'm/d/Y' } 
     }, 
     ... 
    ] 
}); 

// turn on filter toolbar 
myGrid.filterToolbar(); 

data.rowsはajax呼び出しから戻されます。これは1つを除いてすべての方法で機能します。私はクライアントサイドをページ設定し、クライアントサイドをソートし、colModelを表示するフィールド以外のすべてのフィールドで検索できます。この「blah」フィールドは日付フィールドで、mm/dd/yyyy形式で日付を正しく表示します。しかし、私はツールバーに11/17/2010のようなものを入力してEnterキーを押すと、0レコードが返されます。

は、だから私はjqGridコードに深く掘って、ここではそれが検索前に発生するものです:(M

{"groupOp":"AND","rules":[{"field":"blah","op":"bw","data":"11/17/2010"}]} 

を最終的に、それはすべての行を通過するとき、それは、フィールド上にevalを操作を評価します)& & p.push(本)ライン、mはこれです:フィールドが日付であることを認識していないよう

(String(this.blah).substr(0,10) == String("11/17/2010")) 

基本的に、それは私には見えます。それはparseDateの代わりにparseを呼び出します。誰にどのようにこれを修正するためのアイデアがありますか?私はサーバー側を検索することは簡単です、私はちょうどその文字列を渡すことができます、それを解析し、バムを知っている。しかし、できる限りクライアント側にいたいと思います。 OlegとTomが書いたサンプルのいくつかでこれを複製することができたので、問題であるか、設定に何か不足しています...

+0

ところで、jqGridはあなたのためにAJAX呼び出しを行うことができるので、 'data.rows'の使用は必要ありません。 http://stackoverflow.com/questions/2835957/jquery-with-asp-net-mvc-calling-ajax-enabled-web-service/2836817#2836817、http://stackoverflow.com/questions/からのリンクを参照してください。 4169384/how-can-i-bind-my-view-model-to-a-jqgrid/4169848#4169848とhttp://www.trirand.com/blog/?page_id = 393 /機能要求/休憩サポート/#p21762。私はリンクを続けることができます... – Oleg

+0

実際には、私は私のajax呼び出しの中でグリッドの作成をラップする必要がありました。その理由は、フィルタツールバーのドロップダウンフィルタを動的に更新しているため、GridUnload()を呼び出す必要があるためです。私はドキュメントを見て、トリガー( 'reloadToolbar')のようなものを見つけることができませんでした。 – Milimetric

答えて

3

あなたの質問。ローカル検索の際にevalで使用されるライン

(String(this.blah).substr(0,10) == String("11/17/2010")) 

を掲載するので、私はあなたがローカル検索が実装されているかを理解するために多くの時間を費やすとします。上記の行((String(this.blah).substr(0,10) ...参照)が実行されるべきものではないことがわかるので(String(this.blah)の値は「2010/11/17」ではなく「2010-11-17」になります)、jqGridの対応する関数を上書きすることができます(機能_getStrの中に$.jgrid.from)とその方法で問題を解決します。

私はこのテクニックを示す対応するthe demoを準備するのに多くの時間を費やしています。デモはthe answer in trirand forumとしました。質問では、'benevise'を検索すると'bénevise'のような文字列を探したがっていました。したがって、本当にカスタムのローカル検索を実装する必要があります。あなたが記述した問題を解決するのに十分な情報が得られることを願っています。

更新済み:もっと簡単な回避策が見つかったようです。データを持つ'blah'列にはsearchoptions: {sopt: ['eq','ne']}を定義するだけです。その後、"bw"(先頭)は列に使用されません。 「等しい」と「等しくない」操作は、ローカル検索で正しく機能します。

更新2:は、私がsoptオプションを使用している実例です。

+0

さて、この例を試してみましたが、ソースデータを変更すると動作します。使用しているデータに「2007-09-01」のような日付が定義されていることに気付きました。私のデータは:new Date( "2007-09-01")でした。私のソースデータはASP.NET MVCから来ているため、JSON.parseをオーバーライドしてMicrosoftの日付形式を正しく解釈する必要がありました。/^\/Date \\((\ d +)\\)\/$/ だから、グリッドには問題はありませんが、Dateオブジェクトを渡すことができればうれしいでしょう。私は、必要な唯一の変更は、parseDate関数に追加すると思う:if } ありがとうオレグ! – Milimetric

関連する問題