我在剑道网格中有120列,并选择全部并取消选择所有功能。 如果我选择每个循环,则需要花费大量时间来隐藏或显示所有列。 有没有办法在一次通话中隐藏/显示所有列。
只想提一下kendo showColumn / hideColumn非常慢。
$(".some-class").each(function(){
var field1 = $(this).data("field");
input.find('label').addClass('enableCheck');
input.find('label').removeClass('disableCheck');
$("#grid-id").data("kendoGrid").showColumn(field1);
}
答案 0 :(得分:1)
我已经为您创建了这种场景的演示:Show/Hide all columns
这使用网格的内置显示/隐藏功能,并使用比你大约130列的网格,它平均在2秒内完成操作。我添加了一个"计时器"所以你可以看到它从列的循环到操作的结束需要多长时间。
$("#clickme").on('click',function(){
var grid =$("#grid").data("kendoGrid");
var columns = grid.getOptions().columns;
var start = new Date().getTime();
columns.forEach(function(me){
if(me.hidden !== undefined && me.hidden === true)
{
grid.showColumn(me.field);
}
else
{
grid.hideColumn(me.field);
}
//console.log(me);
});
var end = new Date().getTime();
console.log(start,end, end-start);
$("#timer").text((end-start)/1000 + ' Seconds to run' );
});
所有这一切都是获取网格中的列,然后检查它是否当前是隐藏的(如果是,那么它将显示它,否则它将隐藏它)
这只是一个简单的按钮,您可以在网格下单击它。
对于这种类型的操作,我认为2秒以上足够快,并且感觉"关于这个列数的权利取决于你在当前页面上有多少行,它也必须隐藏所有这些元素。