【问题标题】:JQgrid how do I change background color of row based on server data?JQgrid 如何根据服务器数据更改行的背景颜色?
【发布时间】:2012-06-06 17:01:55
【问题描述】:

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

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

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

【问题讨论】:

    标签: php jquery jqgrid background row


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-04-23
      • 2014-04-27
      • 1970-01-01
      • 2020-10-11
      • 2022-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多