2011-02-03 27 views
0

MVC 2とエンティティフレームワークでjqGridを実装するプロセスが進行中です。私は、ページング/ソートとCRUDのやりとりを組み合わせた複数の検索機能を利用したいと考えています。グリッドは2つのテーブルで構成されるため、検索機能でも関連するテーブルを検索できる必要があります。私は現在、ページング/ソートをダウンさせるだけでなく、クライアント側でコントローラ側で必要なすべての検索フィルタを返すようにしています。私は、ページング/ソートと関連するテーブル検索をサポートしながら、エンティティフレームワークに対してさまざまな検索演算子をすべて実装する方法の例を探しています。Asp.Net MVC 2 - jqgrid複数検索の例

私の現在のクライアント側のスクリプト:

$(document).ready(function() { 
    $('#grid').jqGrid({ 
     colNames: ['TypeId', 'Type', 'CR Active', 'Category'], 
     colModel: [ 
        { name: 'TYPE_ID', index: 'TYPE_ID', hidden: true, search: false }, 
        { name: 'TYPE', index: 'TYPE', sortable: true, hidden: false }, 
        { name: 'CR_ACTIVE', index: 'CR_ACTIVE', align: 'right', sortable: true, hidden: false }, 
        { name: 'description', index: 'description', align: 'right', sortable: true, hidden: false } 
        ], 
     pager: jQuery('#pager'), 
     sortname: 'TYPE', 
     rowNum: 10, 
     rowList: [10, 20, 50], 
     sortorder: "asc", 
     width: 600, 
     height: 250, 
     datatype: 'json', 
     caption: 'Available Types', 
     viewrecords: true, 
     mtype: 'GET', 
     jsonReader: { 
      root: "rows", 
      page: "page", 
      total: "total", 
      records: "records", 
      repeatitems: false, 
      userdata: "userdata" 
     }, 
     url: "/Type/GetData" 
    }).navGrid('#pager', { view: false, del: true, add: true, edit: true }, 
     {}, // default settings for edit 
     {}, // default settings for add 
     {}, // delete instead that del:false we need this 
     {closeOnEscape: true, multipleSearch: true, closeAfterSearch: true }, // search options 
     {} /* view parameters*/ 
    ); 

}); 

マイコントローラ:iは、ソート/すべての私のページングを取得していますとそう

[ModelBinder(typeof(GridModelBinder))] 
public class GridSettings 
{ 
    public bool IsSearch { get; set; } 
    public int PageSize { get; set; } 
    public int PageIndex { get; set; } 
    public string SortColumn { get; set; } 
    public string SortOrder { get; set; } 

    public Filter Where { get; set; } 
} 

public JsonResult GetData(GridSettings grid) 
{ 
     using (IWE dataContext = new IWE()) 
     { 
      var query = from host in dataContext.LKTYPE 
         select new 
         { 
          TYPE_ID = host.TYPE_ID, 
          TYPE = host.TYPE, 
          CR_ACTIVE = host.CR_ACTIVE, 
          description = host.VWEPICORCATEGORY.description 
         }; 


      ////sorting 
      query = query.OrderBy(grid.SortColumn, grid.SortOrder); 

      //count 
      var count = query.Count(); 

      //paging 
      var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray(); 

      //converting in grid format 
      var result = new 
      { 
       total = (int)Math.Ceiling((double)count/grid.PageSize), 
       page = grid.PageIndex, 
       records = count, 
       rows = data.ToArray() 
      }; 

      return Json(result, JsonRequestBehavior.AllowGet); 
     } 

} 

GridSettingsは次のように定義されますクライアントからの検索句を返します。

誰かがこれを達成するための良い例があれば、私はそれを感謝します。コードプロジェクトの例を紹介しましたが、可能な検索演算子の例がいくつかあります。グリッド関連テーブル(http://www.codeproject.com/script/Articles/ArticleVersion.aspx?aid=58357&av=73016)の検索をサポートしているようには見えません。このサイトは良い例を持っていますhttp://www.trirand.com/blog/jqgrid/jqgrid.htmlしかし、サーバーサイドのものはPHPとMySQLで行われます。私はこの時点でそれについて多くは分かっていませんが、私が必要とすることがあれば、ローカル検索も可能です。事前に

おかげで、これはものと同じ種類のを探して誰に役立つはず

+0

このトピックに関する私の一連の記事を読む:http://blogs.teamb.com/craigstuntz/2009/04/14/38200/ –

+0

クレイグ、私は実際にあなたの記事を見て、それらの多くから得た。共有していただきありがとうございます!しかし、私はあなたが上記のリンクで見たようなjqGridのMuliSearch機能の例を見ていませんでした。私は何か見落としてますか?あなたの時間をありがとう。 –

答えて

0

ビリー:私は、関連するテーブル検索してそこにあるものの問題はよく分からないhttp://codefucius.blogspot.co.uk/2012/11/implementing-jqgrid-search.html

は - それはちょうどだきっと単にlinqクエリ結合を使用します。

var invoices = from i in db.Invoices 
     join c in customer on c.Id = i.Id // inner join related table 
     join ljic in db.InvoiceCalcs 
     on i.Id equals ljic.Id into ljict // left join related table 
     from ic in ljict.DefaultIfEmpty() 
     where (i.CustomerId == id && c.Name == "Jones") // where clause (i.e. search phrase for 2 related tables) 

問題は、動的LINQの列の名前である場合には、テーブル名と列の接頭辞は、すなわちCustomer.Name ==「ジョーンズ」などの選択肢はただのSQLビューを使用することですテーブルを結合してクエリを実行すると、パフォーマンス上の利点もあります。