我正在尝试根据SQL查询返回的数据更改多行的背景颜色。我正在使用JSON作为我的数据类型,并尝试使用loadComplete迭代网格并通过在加载网格后添加css类为行着色。这有效但我返回了1000行,这种方法大大减慢了网格的加载速度。用户必须等待很长时间才能最终加载网格。
我没有尝试使用客户格式化程序对行进行着色,因为我被告知当客户格式化程序被触发时网格将无法使用,因此会出现错误?我已经看到了关于设置超时时间的文档,因此网格在客户格式化程序的DOM中可用,但这听起来会减慢网格的加载速度,这正是我想要避免的。
理想情况下,我希望在服务器调用(PHP)期间根据表数据为行分配一个类,然后在客户端加载网格时,它会根据css样式为行着色。似乎在服务器端分配一个类是最有效的方法,所以我不必多次循环数据或不止一次绘制网格?还有哪些其他技巧可以做到这一点?谢谢!
答案 0 :(得分:1)
执行所需操作的最佳方法是使用rowattr
。我在the answer中描述了你所需要的。在更旧的版本中,您将不得不像更旧的answer中描述的那样进行迭代,并将类设置为某些行。
最重要的是要了解页面上每个元素的每次更改都会重新计算页面上存在的所有其他元素的位置。需要做的最小值是回流(参见here)。如果使用jqGrid 的gridview: true
选项,网格主体的所有行将首先创建为字符串,然后将使用一个操作放置在页面上(分配innerHTML
属性的东西。如果在没有分页的情况下使用大量行,它会显着提高性能。如果您使用自定义格式化程序cellattr
或rowattr
,则可以自定义网格体构建的默认过程,而不会出现任何性能缺陷。
自定义格式化程序的使用通常是正确的,但您必须为每列定义格式化程序。此外,如果你想使用不同类型的许多列(复选框,数字,货币),自定义格式化程序的使用并不好,因为你必须再次实现所有格式化程序或从自定义格式化程序中调用预定义的格式化程序,不需要的代码。
cellattr
的使用情况更好(请参阅here,here或here),但您必须设置的class
属性所有单元格(列),而不是仅设置行class
)的<tr>
属性。
所以我发现最好使用rowattr
,就像我在回答的开头所建议的那样。在the answer中,您会找到您需要的确切内容。