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

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

理想情况下,我想在服务器调用(PHP)期间基于表数据为该行分配一个类,然后在客户端加载网格时,它将根据css样式为行着色。似乎在服务器端分配一个类是最有效的方法,因此我不必多次遍历数据或绘制网格不止一次?还有哪些其他技术可以做到这一点?谢谢!

最佳答案

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

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

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

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

因此,我发现最好使用rowattr,就像我在回答开始时建议的那样。在the answer中,您会找到所需的确切信息。

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

10-16 04:25
查看更多