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

Posted

技术标签:

【中文标题】过滤后如何在剑道 ui 网格上显示水平滚动条?【英文标题】:How can I show the horizontal scrollbar on a kendo ui grid after filtering? 【发布时间】:2013-01-27 06:56:31 【问题描述】:

我有一个包含许多列的剑道 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 以查看问题。

【问题讨论】:

【参考方案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],
    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】:

基于 Trey Gramman 添加清除过滤器按钮的方法:

$("#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。

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

感谢您的回答。我试图用你的想法更新我的 jsfiddle,水平滚动条似乎没有重新出现。因此,第 x 列到第 n 列(其中 x 是完全向左滚动时显示屏上的最后一个可见列,而 n(是网格的最后一列)仍然无法访问以清除过滤器。或者您是否建议重新加载原始数据?如果是前者,你能否更新/分叉小提琴来证明这个工作?如果是后者,那么我认为用户体验会很差,要求他们采取这个行动。 但我想这是两害相权取其轻。

以上是关于过滤后如何在剑道 ui 网格上显示水平滚动条?的主要内容,如果未能解决你的问题,请参考以下文章

隐藏/显示剑道网格​​滚动条

如果启用了无限滚动,如何防止剑道网格两次加载数据?

剑道网格,水平滚动和列大小

如何在剑道网格中自动启用或禁用滚动条?

JQGrid当autowidth = true时,如何删除恼人的水平滚动条? (在IE中)

当文本长度很大时,在网格内呈现的 LinkBut​​ton 会显示水平滚动条