在鼠标悬停上为Kendo UI Grid中的每一行显示行详细信息作为弹出/工具提示表单

时间:2012-12-28 12:20:54

标签: javascript jquery kendo-ui

我有一个填充了数据的网格 我想只显示3或2列,并隐藏其余列,因为网格非常宽。 当鼠标悬停在一行上时,我想显示该行的所有列,如弹出/工具提示形式。

请帮我解决这个问题。我搜索了很多,只找到了可编辑的弹出窗口,点击了按钮而不是悬停。

function PopulateGrid() {
    $("#recentNews").kendoGrid({

        columns: [
            { field:      'Date', title: 'Date', width: 80,
                template: '#=kendo.toString(toDate(NewsDate), "yyyy/MMM/dd") #'
            },
            { field:      'TradeTime', title: 'Time', width: 60,
                template: '#=kendo.toString(toDate(NewsTime), "hh:mm:ss") #'
            },

            { field: 'Title', title: 'Description', width: 200 },
            { field: 'Country', title: 'Country', width: 40 },
            { field: 'Economy', title: 'Economoy', width: 40 }

        ],

        dataSource: {
            transport: {
                read: {
                    url:      'Home/GetNews',
                    dataType: "json",
                    type:     "POST"
                }
            },
            schema:    {
                data:  function (data) {
                    return data.data;
                },
                total: function (data) {
                    return data.total;
                }
            },
            pageSize:  100

        },
        //            change: onChange,
        //          dataBound: onDataBound,
        dataBound:  HoverOnGrid,
        pageable:   true,
        sortable:   true,
        scrollable: true,
        height:     565,
        width:      2000
    });
}

1 个答案:

答案 0 :(得分:5)

关于您要实施的内容,有两个单独的问题

  1. 将鼠标悬停在Grid行(简单)上。
  2. 生成一个弹出/工具提示,显示其余列(简单但需要一些编码)。
  3. 由于您似乎已经定义了一个名为HoverOnGrid的函数,因此请将其写为:

    function HoverOnGrid() {
        $("tr", "#recentNews").on("mouseover", function (ev) {
            // Invoke display tooltip / edit row
            var rowData = grid.dataItem(this);
            if (rowData) {
                showTooltip(rowData);
            }
        });
    }
    

    其中grid是:

    var grid = $("#recentNews").kendoGrid({
        ...
    }).data("kendoGrid";
    

    现在,一个棘手的问题,如何显示工具提示/弹出窗口...没有预定义的方法,你应该自己做。您可以获得的结果是将HoverOnGrid定义为:

    function HoverOnGrid() {
        $("tr", "#recentNews").on("click", function (ev) {
            grid.editRow(this);
        })
    }
    

    并且Grid初始化说:

     editable:   "popup",
    

    但这会打开popup,但会在编辑模式下显示字段(您可以在dataSource.schema.model中修改所有字段都无法编辑的内容:

    model: {
        fields: {
            Date:      { editable: false },
            TradeTime: { editable: false },
            Title:     { editable: false },
            Country:   { editable: false },
            Economy:   { editable: false }
        }
    }
    

    但它仍会在update中显示cancelpopup按钮。

    所以,我的建议是编写一段代码来创建tooltip

    编辑:要隐藏tooltip,您应首先截取mouseout事件:

    $("tr", "#recentNews").on("mouseout", function (ev) {
        // Hide Tooltip
        hideTooltip();
    });
    

    其中hideTooltip可能很简单:

    var tooltipWin = $("#tooltip_window_id").data("kendoWindow");
    tooltipWin.close()
    

    假设您始终对id使用相同的tooltip(在此示例中为tooltip_window_id)。