如何在过滤后在kendo ui网格上显示水平滚动条?

时间:2013-02-12 02:40:01

标签: filter grid kendo-ui

我有一个包含许多列的kendo UI网格。可以通过水平滚动查看溢出的列。但是,如果你

1)滚动到最初未显示的列

2)对该列进行过滤,使得没有行匹配过滤条件

网格将不再允许水平滚动。已应用过滤器的列无法清除。

如何在过滤后显示水平滚动条?

这是一个jsfiddle,你可以看到问题

http://jsfiddle.net/9sxkG/1/

以下是代码:

var dataItem = {};
var columns = [];

for (var i = 0; i < 20; i++) {
    dataItem['col' + i] = i;
    columns.push( {
        field: 'col' + i,
        width: 80,
        filterable: true,
        type: 'number'
    } );
}

$("#grid").kendoGrid({
    scrollable:true,
    columns: columns,
    filterable: true,
    dataSource: [dataItem]
});

例如,转到第18列并过滤等于20以查看问题。

3 个答案:

答案 0 :(得分:2)

基于Trey Gramman添加 clear filter 按钮的方法:

$("#grid").kendoGrid({
    scrollable: true,
    columns   : columns,
    filterable: true,
    toolbar   : [
        {
            name      : "clean_filter",
            imageClass: "k-icon k-i-funnel-clear",
            text      : "clean filter"
        }
    ],
    dataSource: [dataItem]
});

$(".k-grid-clean_filter", "#grid").on("click", function (e) {
    $("#grid").data("kendoGrid").dataSource.filter({});
});

看到它正在运行here

它不能解决滚动标题的问题,但至少可以让你继续(如果找不到更好的东西)。

答案 1 :(得分:2)

我有同样的问题,我解决了它在网格中添加一个空行 代码:

var dataItem = {};
var columns = [];

for (var i = 0; i < 20; i++) {
  dataItem['col' + i] = i;
  columns.push( {
    field: 'col' + i,
    width: 80,
      filterable: true,
      type: 'number'
  } );
}

$("#grid").kendoGrid({
    scrollable:true,
    columns: columns,
    filterable: true,
    dataSource: [dataItem],
    dataBound: function(e) {  
        if(this.dataSource.view().length == 0) {
             var colspan = this.content.find("table col").length;
             this.content.find("table").append("<tr><td colspan=" + colspan + "></td></tr>");
        }
        $("#grid").find(".k-grid-footer-wrap").scrollLeft($("#grid").find(".k-grid-content").scrollLeft());        
        this.content.bind('scroll', function () {
            $("#grid").find(".k-grid-footer-wrap").scrollLeft(this.scrollLeft);
        });
    }
})

答案 2 :(得分:1)

有趣的delima。我认为你最简单的答案是在网格旁边添加一个按钮来“刷新”网格。以下javascript将导致刷新。

function LoadAllPositions() {
    $("#grid").data("kendoGrid").dataSource.read();
}