如何根据某些列值隐藏交互式网格中的行?

时间:2018-03-07 13:57:48

标签: oracle oracle-apex oracle-apex-5 oracle-apex-5.1

我有一个带有记录列表的交互式网格,让我们说它有一个日期列。现在我只想显示那些记录或只编辑那些可编辑的记录,其中该日期列中的月份等于页面加载时的当前月份。现在我知道可以使用执行javascript代码作为选项创建动态操作。但是实际的代码是什么呢?我试图用这个

访问网格
var grid = apex.region("emp").widget().interactiveGrid("getViews", "grid");

然后我可以使用grid.model._data获取记录并循环遍历它并检查日期列值并验证它是否是当前月份,但在检查后我不知道是否设置了css对于该特定行,显示为{display:none;}。任何帮助,将不胜感激。感谢。

2 个答案:

答案 0 :(得分:2)

试试这个:

1 - 在所需列的交互式网格中创建动态操作 禁用

事件:行初始化[交互式网格]

选择类型:列

地区:您的网格区域

列:您要禁用或启用的列

2 - 在客户端条件:

类型:JavaScript表达式

Javascript Expression:

//Suppose there is a function (getMonth) 
//that returns the number of the month (1..12) in a date string;
//you can do this expression.
getMonth($(this.triggeringElement).val()) != ((new Date()).getMonth() + 1)

3 - 真实行动

禁用

选择类型:列

列:要禁用或启用的列

示例:https://apex.oracle.com/pls/apex/f?p=145797:8

专栏" CREDIT LIMIT"当值为3000

时禁用

答案 1 :(得分:1)

  

我只想显示那些日期列中的月份等于页面上当前月份的记录(...)   负载

由于交互式网格的来源是SELECT语句,为什么不包含WHERE条款,其中包含以下内容:

where trunc(date_column, 'mm') = trunc(sysdate, 'mm')

是的,我知道 - 可能的性能影响(未使用DATE_COLUMN的索引)和东西,但这只是一般的想法。如果结果还可以,可以进一步改进。

[编辑,看到评论后]

更改WHERE子句没问题:

where date_column >= 
  case when to_number(to_char(sysdate, 'dd')) <= 5 then trunc(add_months(sysdate, -1), 'mm')
       else trunc(sysdate, 'mm')
  end