2013-03-18 25 views
8

私は、ページングで剣道UIグリッドを使用しようとしています。私はそれを100に設定していますが、私が設定しているページサイズの10のアイテムのうちの1 - 10を表示していますが、すべてがTotal属性に期待されるようです。誰もがこれでより良い成功を収めましたか?私は剣道のドキュメントやフォーラムを検索して成功しませんでした。剣道UI - グリッドページネーション(サーバー側)

@(Html.Kendo().Grid(Model) 
.Name("Grid") 
.Columns(columns => 
{ 
    foreach (System.Data.DataColumn column in Model.Columns) 
    { 
     columns.Bound(column.ColumnName); 
    } 
}) 
.Pageable() 
.Sortable() 
.Scrollable() 
.Filterable() 
.Groupable() 
.DataSource(dataSource => dataSource 
    .Ajax() 
    .PageSize(10) 
    .Total(100) 
    .Model(model => 
     { 
      foreach (System.Data.DataColumn column in Model.Columns) 
      { 
       model.Field(column.ColumnName, column.DataType); 
      }     
     }) 
    .Read(read => read.Action("Read", "Controls")) 
) 

おかげで

+0

「.Total」属性を削除するとどうなりますか? – JBntis

+0

ASP.Net MVC Wrapperを使用して解決した場合は、ソリューションを投稿してください。 – Lijo

答えて

12

As explained in the documentationあなたはあなたのスキーマ内の合計を指定する必要があります。また、あなたは正確にスキーマによって指定されたこの場所で、サーバからの応答を返すたびにその合計を返す必要があります。同じ

dataSource: { 
    serverPaging: true, 
    schema: { 
     data: "data", 
     total: "total" 
    }, 
    //... 

hereを議論しています。

exampleを確認してください。

+1

私のコードからわかるように、私のモデルはDataTableなので、剣道ラッパーを使用しています。私はそれを使い続けたいと思う。私は、MVCラッパーで動作するサンプルを見つけることができませんでした。 – spooti

+0

コントローラの動作はどのようになっていますか?read.Action( "Read"、 "Controls"))? –

+0

これは正確には私が探していたものではありませんが、私はコードにいくつかの変更を加えて、このアプローチで動作させました。ありがとう – spooti

0

元の例によると、「合計」に自動的に認識されます、そして、あなたは、1ページにつき100個の結果を表示したい場合は代わりに「がPageSize」でそれを設定。 serverPagingが有効になっている場合

+0

ページあたり10個のアイテムを表示したいと思い、合計で100個のアイテムを持っていると言うことができます – spooti

+0

元の例から、「トータル」が指定されていない場合は削除してください: 1 - 10個の100個のアイテム – JBntis

+1

私がしたくない100項目すべてを返すとうまくいくでしょう。クライアント側ではなくサーバーサイドページネーションが必要です。 – spooti

0

あなたはASP.NET MVCのための剣道ラッパーを使用する場合は、追加することを検討:

.EnableCustomBinding(true) 

としては、このarticleで説明した、カスタムバインディングは、施設をソート/組み込みのページングをバイパスすることができます。 このようにTotalが考慮されます。

+0

ありがとうAndrei私はそれをチェックします – spooti

6

そうでなければ、応答の[合計]フィールドを渡す必要があります。

あなたのビューは次のようになります 要求::ソートを=あなたは魔法が起こるかわかります

public ActionResult Data_Read([DataSourceRequest]DataSourceRequest request, int Id) 
     { 
      int total = yourQuery.GetTotal(Id); 

      var returnViewModel = yourQuery.GetViewModels(Id, request.Page, request.PageSize); 


      return Json(new 
      { 
       Data = returnViewModel, 
       Total=total 
      }); 
     } 

ビューフィドラーでのリクエストとレスポンス:

@(Html.Kendo().Grid<YourViewModel>() 
     .Name("grid") 
     .DataSource(dataSource => dataSource   
      .Ajax() 
      .PageSize(20) 
      .ServerOperation(true) 
      .Read(read => read.Action("Data_Read", "YourController", new {Id=Model.CurrentId})) 
     ) 
     .Columns(c => 
     { 
      c.Bound(x => x.Name); 
      c.Bound(x => x.CreatedTime); 
     }) 
     .Pageable() 
     .Sortable() 
) 

次のようにあなたのアクションコードSessionId-asc &ページ= 7 & pageSize = 20 &グループ= &フィルタ=

これは、グリッドがコントローラに渡すDataSourceRequest形式です。ページングに必要なパラメータがすでに含まれています。

アクションからの応答を見ると、すべてのレコードを含むデータフィールドが表示されます。合計フィールドは、剣道グリッドのページングに必要なすべてのレコードの合計金額です。

関連する問題