如何在 kendo 模板上获得 kendo 网格

How to get a kendo grid on a kendo template

首先我做了一个Kendo网格。网格的每一行都有一个按钮,单击它会打开一个 Kendo 模板(弹出窗口)。还在就好

是否可以在弹出窗口中添加另一个网格并向每个网格行添加可编辑的子项(如网格层次结构)?

这是我的主网格:

var grid= $("#Grid").kendoGrid({
        columns: [
          { field: "Name", title: "Name" },
          { field: "Description", title:"Description"},
          { field: "Remarks", title:"Remarks" },
          { command: { name: "details", text: "....", click: showDetails }, title: "Button", attributes: {
              style: "text-align: center;"
          }
          },
          {field:"Status",title:"Status"},
          ],


{......... data source and irrelevant code }

});

window 弹出窗口和按钮点击功能的代码:

wnd = $("#details")
                        .kendoWindow({
                            title: "Details",
                            modal: true,
                            visible: false,
                            resizable: false,
                            width: 400,
                            height:600
                        }).data("kendoWindow");

    detailsTemplate = kendo.template($("#template").html());
    });

    function showDetails(e) {
        e.preventDefault();

        var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
        wnd.content(detailsTemplate(dataItem));
        wnd.center().open();
    }

模板代码如下:

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

    <div id="details-container">
        
        <dl>
            <dt id="fac">Fan: </dt>
            <dt id="gc"> AC </dt>
            <dt id="pn"> Name: </dt>
            <dt id=pk> #=Name# </dt>
            <dt id="sn">Status: </dt>
            <dt id=sk> #=Status# </dt>

        </dl>
        <br />
        <div class="rowdiv">
   
            <div id="windowgrid"></div>
           <!-- windowgrid is another grid which I need to get from this template, it is not displaying the grid but give a space in between -->         
           
        </div>
   
        <br />
        <button id="bbb3" class="button">Cancel</button>
        <button id="bbb2" class="button">Save</button>
        <button id="bbb1" class="button">Refresh </button>



    </div>
</script>

包含window网格的div标签不显示网格,而是显示剩余的其他内容。 你能指出我在代码中犯了什么错误吗 其次,你能帮我写代码让每个网格行都有一个子行吗?

谢谢

编辑 这是整个代码的 dojo link:http://dojo.telerik.com/igOroG

您正试图在元素在 x-kendo-template 中呈现之前对其进行初始化,因此只需将网格实例化移动到 kendoWindowopen 之后即可。

function showDetails(e) {
    e.preventDefault();

    var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
    wnd.content(detailsTemplate(dataItem));
    wnd.center().open();
    // grid definition here
    var grid = $("#windowgrid").kendoGrid({
        .....
    }).data("kendoGrid");
}

"Code to get a child row for each grid row"

您可以在网格上使用 detailInitdetailTemplate 来实现此目的。使用 detailInit 函数,您将能够使用 [e.data].

访问该特定行的数据
// gets elements on detailRow
var detailRow = e.detailRow;
// get the data at the expanded row
var dataList = [e.data];      

我已经更新了您的 Dojo example 以显示首先初始化网格所需的更改并扩展代码以提供第一个网格的详细信息行。

编辑

为了根据所选值将过滤后的数据源应用到弹出式网格,您可以在应用到 Kendo 数据源之前对数据使用 filter 函数:

var filteredDataArr = dataArr.filter(function(el) {
    return el.NId == e.NId      
});

el 是数据数组中的元素,e.NId 是父网格中选定的 NId

已更新 Dojo example 以演示上述操作。