JQgrid 如何根据服务器数据更改行的背景颜色


JQgrid how do I change background color of row based on server data?

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

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

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

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

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

自定义格式化程序

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

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

所以我发现最好使用rowattr就像我在回答开始时建议的那样。在答案中,您将准确找到所需的内容。