0

Trirand.Web.MvcクラスでJQGridを使用しており、カスタムページングを実行する方法を理解しようとしています。

ここでページングのデモを見ました

これらのデモの問題は、linqコンテキストオブジェクトに直接バインドし、MVCがページングを処理できるようにすることです。

    // This method is called when the grid requests data. You can choose any method to call        
    // by setting the JQGrid.DataUrl property        
    public JsonResult PerformanceLinq_DataRequested()        
    {            
        // Get both the grid Model and the data Model            
        // The data model in our case is an autogenerated linq2sql database based on Northwind.            
        var gridModel = new OrdersJqGridModel();            
        var northWindModel = new NorthwindDataContext();            
        // return the result of the DataBind method, passing the datasource as a parameter            
        // jqGrid for ASP.NET MVC automatically takes care of paging, sorting, filtering/searching, etc
        return gridModel.OrdersGrid.DataBind(northWindModel.OrdersLarges);        
    }    

バインドしたいデータセットは非常に複雑で、ページングを行うストアドプロシージャからデータセットを返します。

したがって、JQGridに指定する必要があるのは、結果セット全体の特定のページの行の正しいサイズだけです。合計行数を返すこともできます。

だから私はリストmyListOfObjectsに私の結果を持っています。

myListOfObjects.AsQueryable()を使用してこれをDataBindに渡すことができます

問題は、JQGridは{ページサイズ}行しかないため、ページングオプションを表示しないことです。

合計行数を渡すことは可能ですか?

Teleriks MVCグリッドなどの他のグリッドを使用すると、合計行数を渡すことができ、ページングが正しく表示されます。

4

1 に答える 1

0

さて、私はこれを自分で解決することができました。それを行う他の方法があるかもしれません、もしそうなら、私はそれらを聞きたいです!

JQGrid.DataBindはJsonResultオブジェクトを生成し、そのデータ値はTrirands独自のオブジェクトTrirand.Web.Mvc.JsonResponseに設定されます。

これはTrirand.Web.Mvcの内部クラスであるため、VisualStudioのデバッグを使用して表示できる構造をコピーする必要がありました。

それは持っています:

  • ページ-現在のページ番号
  • レコード-合計レコード数
  • 行-タイプTrirand.Web.Mvc.JsonRow(これも複製する必要があります)
  • total-必要なページの総数

JsonRowは次のようになります。

  • cell-列の文字列配列
  • id-行ID

したがって、私のコードは次のようになりました。

var jsonList = new List<JSONRow>();
myData.ForEach(x => jsonList.Add(new JSONRow(x)));

var jsonResult = Json (new
                            {
                                page = page,
                                rows = jsonList.ToArray(),
                                records = totalRows,
                                total = Math.Round((double)totalRows / rows, MidpointRounding.AwayFromZero)
                            }, JsonRequestBehavior.AllowGet);


   return jsonResult;

私のJsonRowは次のようになります。

public class JSONRow
        {
            public string[] cell { get; set; }
            public string id { get; set; }

            public JSONRow(MyObjectType myObject)
            {
                id = myObject.id;
                cell = new string[3];
                cell[0] = myObject.Col1;
                cell[1] = myObject.Col2?? "";
                cell[2] = myObject.Col3?? "";

            }
        }
于 2012-06-01T13:58:49.587 に答える