【问题标题】:popup kendo window when clicked on grid data单击网格数据时弹出剑道窗口
【发布时间】:2015-04-16 12:59:48
【问题描述】:

我为我的项目中的 10 种产品创建了一个剑道网格。我希望在单击剑道网格中显示的产品名称时弹出包含产品详细信息的剑道窗口。

我查看了剑道网格的演示,但我不想编辑所选产品的详细信息,也不想使用单独的列来显示示例和演示中所示的详细信息按钮.

我还查看了 kendo ui 的音乐商店演示,但我无法理解它在 jQuery 中的代码,我正在为我的项目使用带有 razor 语法的 asp.net mvc

注意: 我希望仅在单击产品名称并显示其详细信息时才出现窗口。

【问题讨论】:

    标签: kendo-ui kendo-grid kendo-asp.net-mvc


    【解决方案1】:

    你可以使用:

    $('#grid').on("click", "tr.k-state-selected", function (e) {
        // open window here
        // you have i.e. Id here $('#grid').dataItem($('#grid').select()).Id
    });
    

    为此,您必须在网格配置中设置选项selectable: "row"。 否则你可以只使用:

    $('#grid').on("click", "tr", function (e) { ... }
    

    【讨论】:

    • 嗨,我为我的剑道网格制作了 `.Selectable(s=>s.Mode(GridSelectionMode.Single))' 并在脚本中尝试了您的答案并带有警告消息,但它不起作用
    • 在 Firefox/Chrome 开发者工具中试试这个。 1.检查$('#your_grid_id')是否选择了一些元素, 2.然后执行$('#your_grid_id').on("click", "tr", function (e) { alert('ble'); })
    【解决方案2】:

    您可以利用 detailTemplate 来实现它。

     <script>
                var wnd,
                    detailsTemplate;
    
                $(document).ready(function () {
                    var grid = $("#grid").kendoGrid({
                        dataSource: {
                           pageSize: 20,
                           data: createRandomData(50)
                        },
                        pageable: true,
                        height: 550,
                        columns: [
                            { field: "FirstName", title: "First Name", width: "140px" },
                            { field: "LastName", title: "Last Name", width: "140px" },
                            { field: "Title" },
                            { command: { text: "View Details", click: showDetails }, title: " ", width: "180px" }]
                    }).data("kendoGrid");
    
                    wnd = $("#details")
                        .kendoWindow({
                            title: "Customer Details",
                            modal: true,
                            visible: false,
                            resizable: false,
                            width: 300
                        }).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>
    
            <script type="text/x-kendo-template" id="template">
                <div id="details-container">
                    <h2>#= FirstName # #= LastName #</h2>
                    <em>#= Title #</em>
                    <dl>
                        <dt>City: #= City #</dt>
                        <dt>Birth Date: #= kendo.toString(BirthDate, "MM/dd/yyyy") #</dt>
                    </dl>
                </div>
            </script>
    

    转到此fiddle 进行工作演示

    [更新] 这是在单击产品名称时显示窗口的代码 sn-p

     <script>
                var wnd,
                    detailsTemplate;
    
                $(document).ready(function () {
                    var grid = $("#grid").kendoGrid({
                        dataSource: {
                           pageSize: 20,
                           data: createRandomData(50)
                        },
                        pageable: true,
                        height: 550,
                        columns: [
                            { field: "FirstName", title: "First Name", width: "140px",attributes: { "class": "FirstName"} },
                            { field: "LastName", title: "Last Name", width: "140px" },
                            { field: "Title" }]
                    }).data("kendoGrid");
    
                    wnd = $("#details")
                        .kendoWindow({
                            title: "Customer Details",
                            modal: true,
                            visible: false,
                            resizable: false,
                            width: 300
                        }).data("kendoWindow");
    
                    detailsTemplate = kendo.template($("#template").html());
    
                    $('#grid').on("click", ".FirstName", function (e) {
    
                      e.preventDefault();
    
                    var dataItem =               $("#grid").getKendoGrid().dataItem($(e.currentTarget).closest("tr"));
                    wnd.content(detailsTemplate(dataItem));
                    wnd.center().open();
    
    
      });
                });
    
    
            </script>
    
            <script type="text/x-kendo-template" id="template">
                <div id="details-container">
                    <h2>#= FirstName # #= LastName #</h2>
                    <em>#= Title #</em>
                    <dl>
                        <dt>City: #= City #</dt>
                        <dt>Birth Date: #= kendo.toString(BirthDate, "MM/dd/yyyy") #</dt>
                    </dl>
                </div>
            </script>
    

    Working demo is here

    【讨论】:

    • 我已经在我的问题中明确提到,我不希望有另一个列用于链接到详细视图的按钮。
    • 感谢您的帮助。您能帮我了解剑道窗口和剑道网格的剃刀语法吗?
    猜你喜欢
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多