APEX根据列比较突出显示行

时间:2012-08-06 10:57:23

标签: sql oracle oracle-apex

我在APEX上有一个报告,显示了两个表的JOIN。两个表都具有例如电话号码的值。如果两个电话号码不匹配,我希望该行被高亮显示。

我查看了Actions> Format> Highlight中的突出显示选项,但似乎我只能将列值与特定值进行比较而不是另一列。

我对APEX很新,所以我可能会遗漏一些明显的东西!我已经阅读了其他问题和答案,但他们似乎正在处理更复杂的事情。他们谈到制作一个不可见的列并改变它的价值,但我不知道我会怎么做。

感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

您无法在高亮显示中比较每行的其他列。因此,要么通过查询输出要格式化的列的html,要么使用javascript / dynamic actions。

SQL:

SELECT CASE WHEN a.phone = b.phone THEN htf.escape_sc(a.phone) 
            ELSE '<div class="highlight">'||htf.escape_sc(a.phone)||'</div>'
       END AS phone_highlight
FROM a, b
WHERE a.id = b.id

(输出html时转义特殊字符!) 另外,将列设置为“标准报告列”,这样它将呈现html而不会将其转义。

就个人而言,我会选择javascript:
动态操作,刷新后,执行javascript,检查“在页面加载时触发”:

$("td[headers='TELEPHONE1']").each(function(){
   var lTest = $(this).siblings("[headers='TELEPHONE2']").text();
   if($(this).text()!= lTest){
      $(this).addClass("highlight");
   };
});

这会将突出显示类添加到telephone1的单元格,该单元格与同一行中的telephone2不同。

在这两种情况下我都在上课,所以你也必须提供。 (当然,你可以在js中使用.css(),但我喜欢将样式与功能分开) 例如头部的样式标签:

<style type="text/css">
.highlight{
   background-color: yellow;
   color: purple;
}
</style>

这允许没有样式的无污染的sql,javascript和css中的样式。

答案 1 :(得分:2)

在查询中创建一个伪列以标记感兴趣的记录。然后与旗帜比较:

SELECT a.phone, b.phone
      ,CASE WHEN a.phone = b.phone THEN 1 ELSE 0 END AS match
  FROM a, b
  WHERE a.id = b.id

答案 2 :(得分:0)

我在搜索中偶然发现了这个解决方案,首先感谢你在这个问题上投入的时间。我一直跟着你:

“在这两种情况下我都使用了一个类,所以你也必须提供它。(当然,你可以在js中使用.css(),但我喜欢将样式与功能分开)例如样式标签在头上:

<style type="text/css">
.highlight{
 background-color: yellow;
 color: purple;
 }
 </style>"

你会在Apex中“提供”这个吗?再次感谢,