改ページでKendo-UIグリッドを使用しようとしています。 Total属性にはすべてが期待どおりに機能しているようですが、100に設定すると、ページサイズで設定している10アイテムのうち1〜10が表示されます。誰もがこれでより良い成功を収めましたか?私は剣道のドキュメントとフォーラムを検索しましたが、成功しませんでした。
@(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"))
)
)
ありがとう
ドキュメントで説明されているようにserverPagingが有効な場合、スキーマで合計を指定する必要があり、その合計も返す必要がありますスキーマで指定されたこの場所でサーバーから応答を返すたび。
dataSource: {
serverPaging: true,
schema: {
data: "data",
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()
)
以下のアクションコード:
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
});
}
Fiddlerで要求と応答を表示すると、魔法がどのように行われるかがわかります。要求:sort = SessionId-asc&page = 7&pageSize = 20&group =&filter =
これは、グリッドがコントローラーに渡すDataSourceRequest形式です。ページングに必要なパラメータがすでに含まれています。
アクションからの応答を表示すると、すべてのレコードを含むデータフィールドがあることがわかります。合計フィールドは、剣道グリッドのページングに必要なすべてのレコードの合計金額です。
ASP.NET MVCにKendoラッパーを使用する場合は、以下を追加することを検討してください。
.EnableCustomBinding(true)
この article で説明されているように、カスタムバインディングにより、組み込みのページング/ソート機能をバイパスできます。このようにして、合計が考慮されます。
元の例によると、「合計」は自動的に認識されます。ページごとに100件の結果を表示する場合は、「ページサイズ」に設定します。