Kendo Grid客户端详细信息模板本地数据绑定

时间:2015-05-03 09:37:36

标签: data-binding kendo-ui kendo-grid kendo-listview

我有一个带有Kendo ListView的Kendo Grid,用于其客户端详细信息模板。 这是网格:

@(Html.Kendo().Grid<ITS.BusinessModel.TaskManager.TaskItem>()
        .Name("grdPackage" + Model + "sTasks")
        .Columns(columns =>
        {
            columns.Bound(taskModel => taskModel.WorkflowInstanceId);
            columns.Bound(taskModel => taskModel.WorkflowInstanceName);
            columns.Bound(taskModel => taskModel.Name).ClientTemplate("<a onclick='openTasksForm(#= ID#)' > #= Name # </a>");
        }
        .ClientDetailTemplateId("TaskSumeriesListViewTemplate")
        .AutoBind(false)
        .DataSource(dataSource => dataSource
            .Ajax()
            .PageSize(20)
            .ServerOperation(true)
            .Model(model => model.Id(Task => Task.ID))
            .Read(read => read.Action("TaskItemsList_Read", "Task", new { packageGroupID = Model, packageType = (Model == -2) ? 0 : (Model == -1) ? 1 : 2 }))
        )
)

以下是客户端模板:

<script type="text/x-kendo-tmpl" id="TaskSumeriesListViewTemplate">

    @(Html.Kendo().ListView<ITS.BusinessModel.TaskManager.WorkflowInstanceSummaryItem>("#=TaskSumaries#")
        .Name("listViewPackage")
        .TagName("div")
        .ClientTemplateId("SummeriesTemplate")
        .ToClientTemplate()
        )
</script>

这是ListView的模板:

<script type="text/x-kendo-tmpl" id="SummeriesTemplate">
    <div>
        #=ColumnName# : #=ColumnValue#
    </div>
</script>

Grid读取的每个TaskItem都有一个TaskSumariesList,它是一个List。 我想在ListView的Grid Client Detail中使用此列表。 我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

在您的网格事件调用中,使用以下内容:

.Events(e => e.DetailInit("detailInit")

然后,你可以这样做:

function detailInit(e) {
    var list= $("#listViewPackage").data("kendoGrid");      

    list.dataSource.data(e.data.TaskSumariesList) 
}

当发生扩展时,列表将填充适当的数据。

您可能需要为列表名称执行以下操作:

.Name("listViewPackage#=WorkflowInstanceId#")

这样,您可以确保您拥有正确列表的正确数据:

function detailInit(e) {
    var list= $("#listViewPackage" + e.data.WorkflowInstanceId).data("kendoGrid");      

    list.dataSource.data(e.data.TaskSumariesList) 
}

答案 1 :(得分:0)

实际上肖恩是对的。欲了解更多信息,请参阅: Kendo UI Grid: Detail Template Binding

您还可以将 DataSource(ds =&gt; ds.Ajax())添加到您的第二个网格中。

@(Html.Kendo().ListView<ITS.BusinessModel.TaskManager.WorkflowInstanceSummaryItem>("#=TaskSumaries#")
        .Name("listViewPackage")
        .TagName("div")
        .ClientTemplateId("SummeriesTemplate")
        .DataSource(ds => ds.Ajax()) 
        .ToClientTemplate()
        )

似乎客户端模板不适用于本地绑定网格。