2012-02-15 12 views
0

EF4 MVC3(C#)でjqgridを使用しています。私はthisの@Olegのソリューションで検索しました。これはうまく動作し、私のニーズに合っています。jqgrid search:検索列を指定する方法は?

私は私のグリッドで定義された次の列があります

  ... 
      { name: 'Stato', index: 'StatoTicketID', width: 20, align: 'left', sorttype: 'int', searchoptions: { sopt: ['eq']} }, 
      { name: 'StatoTicketID', index: 'StatoTicketID', width: 20, align: 'left', sorttype: 'int', hidden: true, searchoptions: { sopt: ['eq']} }, 
      ... 

あなたが見ることができるように、列StatoはインデックスStatoTicketID(隠された整数フィールド)によって順序付けされ、順序が正常に動作します。私はStatoの値を検索しようとすると、私はStato値で検索したいと思いながら

問題は、フィルタは、文字列としてインデックスStatoTicketIDに渡されます。だから、私はString型をInt32に変換できないことを指定するコントローラ内で例外が発生します。

私の場合のように、インデックスが別の列にあるときに検索を適用する列を指定する方法はありますか?

EDIT &回避策:今のところ 私は次の回避策で私の問題を解決しました。

 (inside foreach (Rule rule in rules) of FilterObjectSet by Oleg) 
     .... 

     if (rule.field == "StatoTicketID") 
      { 
       rule.field = "StatoTicket.Stato"; 
       propertyInfo = typeof(T).GetProperty("stringfield"); // where stringfield is a text type column of my model 
      } 

私はエレガントな解決策ではありません非常によく実現する、私は、jqGridから直接、必要な行動をしてください実装する方法を知って、自分で親切な応答を期待しています。事前に

おかげで

答えて

3

あなたがあまりにも複雑な方法を選択したように私には思えます。私はちょうどStato(jqGridに)クライアントに送信し、StatoTicketIDする必要があります。 StatoTicketIDの設計ポイントからは、サーバー実装の一部であり、クライアントはこれに依存してはいけません。あなたがStatoTicketsテーブルのStato列に一意拘束(または一意のインデックス)を持っている場合

あなたは非常に迅速に必要としてStatoTicketIDいつでもあなたを見つけるだろう。そのため、jqGridにはStatoしか含めることができず、「知って」いるだけで、実装の詳細としてStatoTicketIDに関する情報はありません。

Statoformatter: 'select'の使用方法があります。この場合、StatoテキストとStatoTicketIDの間のマッピングはの前にロードされ、の前にグリッドが作成されることを理解することが重要です。場合Stato列はeditoptionsにおけるケースの代わりvaluedataUrlを使用することができない

formatter: 'select', edittype: 'select', editoptions: {value: '12:Stato1;24:Stato2'}, 
stype: 'select', searchoptions: {value: ':All;12:Stato1;24:Stato2'} 

ような特性を有するべきです。

結果として、StatoのデータをStatoTicketIDデータで埋めることができますが、対応するテキストはjqGridによって表示されます。

純粋なStatoテキストで最初の方法を実装することをお勧めします。あなたはサーバーの部分だけで解決できるすべての問題。

+0

ありがとう、オレグ!私は第二の方法を試してみる。 StatoTicketIDは 'Stato'フィールドに与えられた 'priority'に基づいて注文することができるので、純粋なテキスト私の場合、並べ替え順序は良くありません。 私は2番目の方法を試してみます:私はそれが私の場合には最高の解決策だと思います。私はあなたに最新情報をお届けします!どうもありがとうございました! – Larry

+0

@Larry:ようこそ! 'loadonce:true'を使わずに' datatype: 'json''を使うと、サーバ側のソートを実装するので、純粋なテキストを使った後でも 'name:' Stato '、index:' StatoTicketID 'を使い続けることができます'' Stato''カラムの値2番目の方法を選択する場合は、 '' Stato''カラムを編集する際にサーバにポストされるデータに注意してください。あなたが最終的な解決まですべてを実装するかどうかを教えてください。 – Oleg

+0

THX。私は最初のソリューションを実装しようとしましたが、それでも動作しません。私はすでにデータ型 'json'とloadonce:false ... pherapsを使用してソリューションを修正する必要がありますか? 私は第2のものを試しています...あなたを更新しておきますよ、THX! – Larry

関連する問題