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

标签 php jquery jqgrid background row

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

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

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

最佳答案

做你想做的事情的最好方法是使用 rowattr 。我在the answer中描述过正是您所需要的。在更旧的版本中,您将必须像更旧的 answer 中描述的那样进行迭代。并将类设置为某些行。

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

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

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

所以我发现最好使用rowattr就像我在回答开头所建议的那样。在 the answer您会找到您所需要的。

关于php - JQgrid如何根据服务器数据更改行的背景颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10918760/

相关文章:

php - 从 php 发送邮件 - 字符集编码

javascript - 是否可以在页面其他部分加载后克隆图像而不加载?

javascript - 如果它包含零,如何清除文本字段 onfocus,如果它为空,则如何清除 onfocusout,然后将其置零?

javascript - jqGrid - TypeError : "#List". jqGrid 不是函数

php - 删除数据库记录 MVC

PHP:如何用 strip_tags($_POST[...]) 批量替换 $_POST[...]

jquery - 如何更改 jqgrid 自定义格式化程序中单元格的背景颜色?

jquery - 免费 jqGrid 4.8.0 - getCell 在上次更新后不起作用

php - 需要建议来更改我的数据库设计

jquery - 有没有办法让 Bootstrap 进度条在值增加时动画化,但在重置为 0 时不动画化?