3

假设我在数据窗口上有一个字段,它是数据库列的值(“插入 > 列”)。它具有需要保护的条件(属性>常规>保护)。

我希望在保护时将字段背景设为灰色。目前,我能弄清楚如何做到这一点的唯一方法是复制保护条件,无论多么复杂,用 1(保护)和 0(不保护)替换颜色值。

是否有某种语法可以在“表达式”字段中用于引用列的保护值的列背景颜色?我试过

if (column.protect=1, 灰色, 白色)

但它返回错误,说它需要一个 TRUE/FALSE 条件。

是我所追求的不可能,还是只是获得正确语法的问题。

干杯。

4

1 回答 1

6

哇。你喜欢复杂的、分层的问题。

第一个问题是访问值,它不像你描述的那样直接完成。事实上,您使用 Describe() 来获取值。唯一的问题是它以以下格式作为字符串返回,并带有引号(请注意,我们使用标准 PowerScript 字符串表示法,其中 ~t 是一个制表符)

"<DefaultValue>~t<Expression>"

您需要表达式,因此您必须解析它,同时删除引号。

获得表达式后,您需要针对给定的行评估它。这可以通过另一个 Describe () 调用来完成,特别是:

Describe ("Evaluate('<expression>', <rownum>)")

可以使用 GetRow() 函数获取表达式正在评估的行号。

这听起来可能需要 PowerScript 和一些临时值存储,但只要您愿意进行冗余函数调用以多次获取给定值,您可以在表达式中执行此操作,例如(对于示例列b):

if (Describe ("Evaluate (~"" + Mid (Describe ("b.protect"), 
Pos (Describe ("b.protect"), "~t")+1, 
Len (Describe ("b.protect")) -  Pos (Describe ("b.protect"), "~t") - 1) 
+ "~", " + String (GetRow()) + ")")='1', 
rgb(128, 128, 128), 
rgb(255,255,255))

这看起来很复杂,但是如果将 Mid() 表达式放在计算字段中以便查看结果,您会看到它只是解析出 Protect 表达式并将其放入上述的 Describe (Evaluate()) 语法中。

为了简单起见,我在的代码中加入了一个作弊。我使用了我的 Protect 表达式中只有单引号的知识,并选择将 Evaluate() 表达式字符串放在双引号中。如果我试图对任何列进行一般性操作,并且不能假设我的 Protect 表达式中没有双引号,我将使用全局函数将 Protect 表达式中的任何双引号替换为转义引号(〜“),我相信你的代码看起来像一个三重波浪号和一个引号。再说一次,如果我不得不进行全局函数调用(请注意,如果有很多行,表达式中的全局函数调用会对性能产生重大影响),我只需将 Describe ("column.protect") 和 GetRow() 传递给它并构建PowerScript 中的完整表达式,这将更容易理解和维护。

祝你好运,

特里。

于 2010-01-29T06:35:09.743 回答