2014-02-18 41 views
0

我有一个Kendo UI网格,有三列,第一列是复选框,另外两列是文本。我遇到的问题是复选框渲染速度变慢。当网格呈现并且数据填充得非常快时,我必须等待几秒钟以使复选框呈现。而且我在等待,我可以看到,在复选框呈现之前,列中有数字。我正在考虑将其转换,以便使用JavaScript代码创建它,以查看它是否会更快。是否有人看到我的代码会导致渲染速度变慢或性能改善,或者在javascript中执行操作会更快。Kendo Ui ASP网格渲染速度慢

<td id="typeGrid"> 
@(Html.Kendo().Grid(Model.TypeList) 
.Name("TypeList") 
.Columns(columns => 
{ 
    columns.Bound("myID").Sortable(false).Width("35px") 
    .ClientTemplate("<input type='checkbox' name='typeId' value=#=myID#>") 
    .Title("<input type='checkbox' onclick='checkAll(event)'>"); 
    columns.Bound("Name").Title("Name"); 
    columns.Bound("Type").Title("Type"); 
    })    
.Sortable()                
.Resizable(resize => resize.Columns(true)) 
.Selectable(select => select.Mode(GridSelectionMode.Multiple)) 
.DataSource(dataSource => dataSource 
     .Ajax() 
     .ServerOperation(false) 
    ) 
) 
</td> 

编辑

经检验接近我注意到,从模板输入复选框未渲染,直到我的下拉框是渲染。在投递箱被渲染之前,投递箱渲染是否会导致模板不能被应用?他们都使用相同的对象。

<td id="PermType" style="vertical-align: top;"> 
    @(Html.Kendo().DropDownList() 
    .Name("theTypeList") 
    .DataTextField("Type Name") 
    .DataValueField("myTypeID")  
    .BindTo(Model.myTypeList)        ) 
</td> 

// the code above for the grid goes after this 

我的模型

public class myModel 
{  
    public List<subType> TypeList { get; set; } 
    public List<mainType> myTypeList { get; set; } 

    public class subType 
    { 
     public int myID { get; set; } 
     public string Name { get; set; }   
     public string Type { get; set; } 
     public int mainTypeID { get; set; } 

    } 

    public class mainType 
    {   
     public string myTypeID { get; set; } 
     //other property 

    } 

} 

回答

0

在你DataSource你设置Ajax的“方法”,但你传递一个对象到Grid。我认为这可能会导致问题。

从评论

试着改变你的数据源,以这种编辑(我觉得语法可能有点过,但智能感知应该能够帮助):

@(Html.Kendo().Grid(Model.TypeList) 
.Name("TypeList") 
.Columns(columns => 
{ 
    columns.Bound(x => x.myID).Sortable(false).Width("35px") 
    .ClientTemplate("<input type='checkbox' name='typeId' value='#=myID#'>") 
    .Title("<input type='checkbox' onclick='checkAll(event)'>"); 
    columns.Bound(x => x.Name).Title("Name"); 
    columns.Bound(x => x.Type).Title("Type"); 
    })    
.Sortable()                
.Resizable(resize => resize.Columns(true)) 
.Selectable(select => select.Mode(GridSelectionMode.Multiple)) 
.DataSource(dataSource => dataSource 
     .Model(mdl => mdl.Id(x => x.myID)) 
) 

我怀疑这是因为我从来没有用过Selectable()

+0

我试着将它改为'Server()',并试图完全删除'DataSource',并且得到错误'没有指定DataSource Model Id属性。' –

+0

@JackThor我更新了一个想法的答案。 –

+0

对不起,我应该澄清一下,错误所指的模型Id不是我模型中的id,我模型中的id被称为别的东西,我只是为了安全原因而将它改变。我修复了我的代码以更好地反映这一点。数据源没有'Model'。我也删除了'Selectable()'没有工作。但请看看我的编辑,我发现可能有用。 –