2011-07-29 13 views
6

私は最初のASP.NET MVC 3アプリケーションを構築していて、jqGridを使用しています。私の列の1つ、「Flavor Created」は、日付列です。私はDatePickerを使ってその列のグリッドをフィルタリングしたいと思います。現在発生していることは次のとおりです。ユーザーが列見出しフィルタボックスをクリックし、日付ピッカーが表示され、ユーザーが年、月、およびクリックを1日選択します。ピッカーは消え去り、テキストボックスに日付、たとえば03/28/2009を残します。フィルターを実際に動作させるには、そのボックスをクリックして、Enterキーを押してください。これは、ユーザーにとって迷惑です。jqGrid DatePickerフィルタリングEnterキーを使わずに

ユーザーがその日をクリックしたときにフィルタが自動的に起動する方法はありますか?

(余談として、私は日をクリックしたときに、ピッカーが消えるので、ボタン「完了」の使用が何のためにあるのか。おそらく、それは私が欠けている設定であることを確認していない。)

誰もがこの機能を必要とし、解決しましたか?私はこのような何かしようとした

:私はいくつかのウェブサイト上で誰かを見たよう

dataInit: function (elem) { 
    $(elem).datepicker({ changeYear: true, changeMonth: true, showButtonPanel: true, 
    onSelect: function (dateText, inst) { 
     $("#icecreamgrid")[0].trigger("reloadGrid"); 
    } 
    }) 
} 

は示唆が、それは動作していないようでした。

答えて

16

あなたは

dataInit: function (elem) { 
    $(elem).datepicker({ 
     changeYear: true, 
     changeMonth: true, 
     showButtonPanel: true, 
     onSelect: function() { 
      if (this.id.substr(0, 3) === "gs_") { 
       // in case of searching toolbar 
       setTimeout(function(){ 
        myGrid[0].triggerToolbar(); 
       }, 50); 
      } else { 
       // refresh the filter in case of 
       // searching dialog 
       $(this).trigger("change"); 
      } 
     }  
    }); 
} 

UPDATEDで試すことができます:4.3.3 jqGridはdataInitthisとしてグリッドのDOMを初期バージョンから開始します。したがって、上記のコードで変数myGridを使用する必要はありません。その代わりに1を使用することができます。

dataInit: function (elem) { 
    var self = this; // save the reference to the grid 
    $(elem).datepicker({ 
     changeYear: true, 
     changeMonth: true, 
     showButtonPanel: true, 
     onSelect: function() { 
      if (this.id.substr(0, 3) === "gs_") { 
       // in case of searching toolbar 
       setTimeout(function() { 
        self.triggerToolbar(); 
       }, 50); 
      } else { 
       // refresh the filter in case of 
       // searching dialog 
       $(this).trigger("change"); 
      } 
     }  
    }); 
} 

無料jqGridはmodeプロパティと同じように、追加情報が含まれていdataInitの第二optionsパラメータで呼び出します。 modeプロパティの値は、フィルタツールバーを呼び出す場合は"filter"(ダイアログを検索する場合は"search")です。したがって、次のコードを使用することができます

dataInit: function (elem, options) { 
    var self = this; // save the reference to the grid 
    $(elem).datepicker({ 
     changeYear: true, 
     changeMonth: true, 
     showButtonPanel: true, 
     onSelect: function() { 
      if (options.mode === "filter") { 
       // in case of searching toolbar 
       setTimeout(function() { 
        self.triggerToolbar(); 
       }, 0); 
      } else { 
       // refresh the filter in case of 
       // searching dialog 
       $(this).trigger("change"); 
      } 
     }  
    }); 
} 
+1

これはかなりうまく動作します。ありがとう。 Escを押すとG​​ETが起こりますが、私はそれで生きることができます - 私はその多くのデータを取り戻していません。私はtriggerToolbar()を呼び出す前にチェックするfuncを呼び出すことができるかもしれません。 – itsmatt

+1

おそらく、 'onClose'の内部ではなく、' onSelect'の内部で 'triggerToolbar'を呼び出すほうがよいでしょうか?どの状況でツールバーの検索を強制したいのかを正確に記述することができます。一般に、onSelectは、ユーザが新しい日付を選択した場合に呼び出されるイベントです。 – Oleg

+0

ええ、それははるかに良い作品です。ベスト、マット – itsmatt

関連する問題