2013-07-07 11 views
8

剣道グリッドのパフォーマンスが低下しています。1000を超えるレコードをロードしようとすると、グリッドが読み込まれるまでに約8秒かかります。私はコントローラーが3秒でjsonデータを返すのを見ることができます。そして、剣道のグリッドには時間がかかります。剣道グリッド:遅いパフォーマンスの問題

私は500のレコードのPageSizeを持ち、DataSourceRequestを使用していたので、各ページのデータはコントローラからのみ返されます。しかし、まだ喜びはありません。

グリッドのパフォーマンスを向上させる方法はありますか?

グリッド上のUIの仮想化を有効に

@(Html.Kendo().Grid<Model>() 
.Name("KendoTestGrid")  
.Columns(columns => 
{ 

    columns.Bound(p => p.Column5) 
      .Width("18%")    
      .ClientTemplate("#= formatResult(format(column5, '')) #") 
      .EditorTemplateName("Column5") 
      .ClientFooterTemplate("<span href='\\#' id='total'>Total : </span>");    
    columns.Bound(p => p.Column6) 
     .EditorTemplateName("Column6") 
     .ClientTemplate("#= format(column6, '') #")      
     .ClientFooterTemplate("<span href='\\#' id='spanfooter'></span>")    
     .Width("23%"); 
    columns.Bound(p => p.column7)    
     .ClientTemplate("<span href='\\#' id='#=Id #'>#= format(Column7,'')#</span>") 
     .ClientFooterTemplate("<span href='\\#' id='spansum'></span>") 
     .HtmlAttributes(new { Class = "number" }) 
     .Width("18%"); 
    columns.Bound(p => p.column8) 
     .EditorTemplateName("column8")    
     .ClientFooterTemplate("Total:") 
     .ClientFooterTemplate("<span href='\\#' id='TotalSum1'></span>")   
     .Width("23%");  
}) 

.DataSource(dataSource => dataSource 
    .Ajax()  
    .Batch(true) 
    .ServerOperation(true)  
    .Read(read => read.Action("Action", "Controller").Data("getData")) 
    .Create(c => c.Action("Action", "Controller").Data("getData2")) 
    .Update(update => update.Action("Action", "Controller").Data("getData3")) 
    .PageSize(500) .Events(x => x.DataBound("ongriddatabound") 
    .Edit("ongridedit") 
    .Change("ongridchange")) 
    .Editable(editing => editing.Mode(Kendo.Mvc.UI.GridEditMode.InCell)) 

    .Filterable() 
    .Groupable()  
    .Sortable() 
    .Scrollable() 
    .Pageable() 
    .Selectable(s => s.Mode(GridSelectionMode.Single).Type(GridSelectionType.Row)) 
    .Resizable(resize => resize.Columns(true)) 
    .AutoBind(false) 
) 
+1

をオフにします。私は1200の要素とページサイズが500のグリッドを作成しました。ブラウザ/ラップトップでは何も取りません。ここで試すことができますhttp://jsfiddle.net/OnaBai/27g3s/。複雑なテンプレートなどを使っていますか? – OnaBai

+1

グリッドの作成に使用したコードと、使用したカスタムの行テンプレートまたは編集テンプレートを含めてください。 – CodingWithSpike

+0

私は自分の列にClienttemplateとEditortemplateを使用しています。 EditorTemplateは2つの列に数字のテキストボックスを持っています。 – user1870358

答えて

1

以下の私のコードを見つけてください。

$(document).ready(function(){ 
     $("#grid").kendoGrid({ 
     scrollable: { 
      virtual: true // <--- This 
     } 
     }); 
    }); 

これは役に立たない場合は、サーバー側のページングを実装することをお勧めします。

+0

ClientTemplateとEditTemplateを使用するとグリッドが遅くなるでしょうか? – user1870358

+0

他のコメント投稿者がリクエストしたように、コードを投稿する必要があります。 – dcarson

+0

バーチャルスクロールは[Telerik](https://docs.telerik.com/kendo-ui/controls/data-management/grid/appearance#limitations-for-virtual-scrolling)ごとのグループ化と互換性がありません。 – sonyisda1

3

あなたが持っているコントローラ/アクションコードを調べる必要があります。

あなたのデータを返すコンテナによっては、私の経験から、剣道グリッドの最高のパフォーマンスを得るには、IQueryableコンテナを使用し、このコンテナに対してToDataSourceResult関数を実行する必要があります。

public ActionResult Action([DataSourceRequest] DataSourceRequest request, string ExtraParameters) 
{ 
    DBContext db = new DBContext(); 
    IQueryable<Model> models = db.Models; 
    return Json((models).ToDataSourceResult(request)); 
} 

EDIT:あなたは、元の質問に、あなたのグリッドのコードを追加してくださいすることができ、あなたのServerOperation(真)オプション

+0

.ServerOperation (偽)は私が必要なものです。 –

関連する問題