【问题标题】:How to select different detail templates of a kendo ui grid如何选择剑道 ui 网格的不同细节模板
【发布时间】:2016-11-29 19:16:44
【问题描述】:

我有一个类似这个例子的剑道网格细节模板:http://demos.telerik.com/aspnet-mvc/grid/detailtemplate,我想一次选择每个主网格的不同细节,但我只能选择一个主网格的细节模板。

我需要从主网格的每个不同详细信息模板中选择所有行。 这是只获取一个详细模板的选定行的 javascript 代码:

$('#send').click(function () {
            var items = {};
            var grid = $('.k-detail-row .k-grid').data('kendoGrid');
            var selectedElements = grid.select();
            for (var j = 0; j < selectedElements.length; j++) {
                var item = grid.dataItem(selectedElements[j]);
                items['anyName[' + j + '].CodMarca'] = item.CodMarca;
            }
            $.ajax({
                url: '@Url.Action("Index", "Busqueda")',
                type: "POST",
                async: false,
                data: items,
                success: function (result) {
                    console.log(result);
                }
            })
        })

使用这部分代码,我只得到一个详细模板,没有其他模板:

var grid = $('.k-detail-row .k-grid').data('kendoGrid');

我也确实需要选择其他详细信息模板。

【问题讨论】:

    标签: javascript jquery asp.net-mvc telerik kendo-grid


    【解决方案1】:

    您需要遍历所有细节网格...您只处理第一个。

    当你这样做时:var grid = $('.k-detail-row .k-grid').data('kendoGrid'); 即使$('.k-detail-row .k-grid') 返回多个匹配元素,您也只是获得了对第一个详细信息网格的引用。这就是 jQuery 的工作方式...它将返回返回数组的第一个元素的 data()...它不会返回所有返回匹配项的 .data()。

    因此,您必须自己遍历返回的匹配项,获取附加到匹配项的网格引用,获取选定的行,然后转到下一个网格/匹配项,即:

    var items = [];
    var grids = $('.k-detail-row .k-grid');
    
    // Loop through the grids.                
    for (var i = 0; i < grids.length; i++) {
        var grid = $(grids[i]).data('kendoGrid');
        var selectedElements = grid.select();
    
        // Loop through the selected items of the *current* grid.
        for (var j = 0; j < selectedElements.length; j++) {
            var item = grid.dataItem(selectedElements[j]);
    
            items.push(item);
        }
    }
    
    // Do whatever you want with the collected items.
    console.log(items);
    

    Demo

    【讨论】:

    • 感谢您的回复,但现在我有一个问题,当我选择了第一个细节的两行和第二个细节的一行时,它只是在数组中添加了第一个细节的最后一行,并且另一个细节之一。如果我在第二个细节中选择多行,它只会添加第二个细节的行,而不是第一个细节的行。我不知道这是否与我像这样添加到数组的方式有关: items['anyName[' + j + '].CodMarca'] = item.CodMarca;
    • 是的,这是您添加它的方式....您正在用第二个覆盖第一个网格项目条目,因为 j 值将与您循环遍历其他网格相同,即第一个网格,第一行:j = 0 和第二个网格,第一行:j = 0,所以你实际上是在尝试对多个条目使用相同的字段名称......不过,这完全是另一个问题,除了获取每个网格的选定的行。您需要找出一个索引方案,该方案会为每一行生成唯一的键,或者像我一样使用数组......无论您需要什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多