2

我正在尝试根据从 SQL 查询返回的数据更改多行的背景颜色。我使用 JSON 作为我的数据类型,并尝试使用 loadComplete 来遍历网格并通过在加载网格后添加一个 css 类来为行着色。这可行,但我返回了 1000 行,这种方法大大减慢了网格的加载速度。用户必须等待很长时间才能最终加载网格。

我没有尝试使用客户格式化程序为行着色,因为我被告知当触发客户格式化程序时网格将不可用,所以会出现错误?我已经看到有关设置超时时间的文档,因此网格在 DOM 中可供客户格式化程序使用,但这听起来会减慢网格的加载速度,这是我试图避免的。

理想情况下,我想在服务器调用(PHP)期间根据表数据为该行分配一个类,然后当在客户端加载网格时,它会根据 CSS 样式为该行着色。似乎在服务器端分配一个类是最有效的方法,所以我不必多次循环数据或多次绘制网格?有哪些其他技术可用于执行此操作?谢谢!

4

1 回答 1

1

做你想做的最好的方法是使用rowattr. 我在答案中准确描述了您的需求。在更旧的版本中,您将不得不像更旧的答案中描述的那样进行迭代,并将类设置为某些行。

最重要的是要了解页面上一个元素的每次更改都会重新计算页面上存在的所有其他元素的位置。最少需要做的是回流(见这里)。gridview: true在jqGrid的使用选项的情况下,网格体的所有行都将首先创建为字符串,然后通过一个操作(类似于分配innerHTML属性)放置在页面上。在使用大量行而不分页的情况下,它可以显着提高性能。如果您使用自定义格式化程序,cellattr或者rowattr您可以自定义构建网格体的默认过程,而不会有任何性能劣势。

自定义格式化程序的使用通常是正确的,但问题是您必须为每一列定义格式化程序。此外,如果您想使用许多不同类型的列(复选框、数字、货币),自定义格式化程序的使用并不好,因为您将不得不再实现一次所有格式化程序或从自定义格式化程序调用预定义格式化程序,这会产生很大的影响不需要的代码。

的用法cellattr更好(参见此处此处此处),但您必须设置所有class单元格(列)的属性,而不是仅设置行()的属性。class<tr>

因此,我找到了最好的使用方法,rowattr就像我在回答开头所建议的那样。在答案中,您将准确找到所需的内容。

于 2012-06-06T17:36:53.183 回答