2014-02-13 128 views
0

我正在使用jqGrid的ASP.NET WebForms版本,但是我确定相同的事件应该可用作为标准网格。如何检测页面上的所有jqGrids是否已加载?

我有一些页面上有多个网格,它可能只是一个,或可能是几个。我有一个打印按钮,它将显示10,000条记录(显示网格上的所有记录),调整其大小以适应A4纸,激发window.print(),然后返回到原始记录计数,并将网格重新调整为100% 。

缺少的部分是知道何时开火window.print(),因为我需要等待所有网格加载之前,这样做。

我试过有一个全球性的var allGridsLoaded = false;然后使用Load_Complete事件和beforePageChange设置VAR,但显然与每个网格重置VAR我不知道如何跟踪他们呢?

Load_Complete我在想我可以遍历每个网格,但是最清楚的方法是告诉他们是否已经加载了?

回答

1

我不确定我是否完全理解您的要求。然而在我看来,你需要

  • 开始准备之前,让页面
  • 寄存器“全局” Load_Complete所有网格
  • 计数器设置为网格的总数在网格上的总人数印刷,开始重新加载网格,递减计数器的“全球” Load_Complete手柄和window.print()内如果计数器的值将为0。

那么,你真正需要的是从上面的列表中的两个第一件事情。每个网格将基于空的<table>元素构建。 jqGrid将"ui-jqgrid-btable"类添加到所有表中。因此,您可以使用

$(".ui-jqgrid-btable") 

将jQuery包装器获取到页面上的所有网格。 $(".ui-jqgrid-btable").length是网格的数量。要注册常见的 “全局” Load_Complete所有网格可以使用jqGridLoadComplete(或jqGridAfterLoadComplete)事件(见the documentation):

$(".ui-jqgrid-btable").bind("jqGridLoadComplete", function (e, data) { 
    // ... 
}); 

更多的信息,请参阅the answer

我希望您能够以这种方式实现您的所有要求。

+0

作为一个建议,如果你将从绑定到“jqGridLoadComplete”的匿名函数中调用全局函数'Load_Complete',我会建议计数器在匿名函数中递减,并且只在调用全局函数时调用一次计数器为0.换句话说,你可以有一个函数'All_Load_Complete'。如果函数调用次数较少,则会对速度产生积极影响(例如,见http://www.slideshare.net/madrobby/extreme-javascript-performance幻灯片13-18)。 – 2014-02-13 12:31:08

+0

@Tom:对不起,但我不能跟着你。什么“'All_Load_Complete'功能”你的意思是?我建议减少''jqGridLoadComplete''事件处理程序中的计数器。那么你的建议是什么? – Oleg

+0

这一定是我的不好。我认为你是在建议在阅读答案中的第三个重点的全局函数中减少计数器。 – 2014-02-13 13:04:46

相关问题