需要布尔值

时间:2013-12-02 14:01:12

标签: crystal-reports-2008

我想根据某些条件(例如

)更改Crystal报表中Object的背景颜色
  if (({DataTableCable.ColumnChange} and 4) = 4) then
  crGreen

DataTableCable.ColumnChange是一个字段包含一个数字,我想做一个按位而用4,如果结果为4那么改变对象的背景 但我收到以下错误 “需要布尔值” 怎么应该做一个按位和水晶报告?

3 个答案:

答案 0 :(得分:3)

您的代码根本无法在C#或VB.NET中编译。但是,也许你想要这样的东西:

if (DataTableCable.ColumnChange == 4) 
{
    // change to green
}

答案 1 :(得分:2)

  

我想检查4的ColumnChange的逻辑和4是否为4,然后执行其余的

因此您需要使用&<逻辑和,并使用==(比较)而不是=(赋值)

if ((DataTableCable.ColumnChange & 4)== 4) 
{
    // change to green
}

答案 2 :(得分:1)

因此,如果我正确阅读您的帖子,您正尝试在Crystal Reports代码中对您的值({DataTableCable.ColumnChange})执行按位比较。

在网上看,我似乎无法看到任何表明水晶可以进行那种比较的东西。另一种方法是在 .Net 代码中执行该计算,并将其存储在数据源对象的属性/列中 - 这样您就可以简单地检查属性是否为true / false。

<强>更新

另一个选择可能是执行手动算术来计算它。 Nopadol(由OP提供的链接)似乎有很好的例子说明如何做到这一点(我为下属再现了下面的代码)。 No Stress Tech Guide to Crystal Reports Basic for Visual Studio 2008(第9课)似乎涵盖了公式编辑器的使用,它可以帮助您入门。

Function Name: ToBin
Function (NumberVar n)
(
    Local StringVar b;
    Local NumberVar d;
    b := "";
    d := n;
    Do
    (
        b := CStr(Truncate(d Mod 2),0) & b;
        d := Truncate(d / 2);
    )
    While (d > 1);
    CStr(Truncate(d),0) & b;
)

Function Name: ToNum
Function (StringVar b)
(
    Local NumberVar lng := length(b);
    Local NumberVar n := 0;
    Local NumberVar i;
    For i := lng To 1 Step -1 Do
    (
        n := n + ((2 ^ (lng – i)) * Truncate(ToNumber(Mid(b,i,1))))
    );
    n;
)

Function Name: BitAnd
Function (NumberVar n1, NumberVar n2)
(
    Local StringVar b1 := ToBin(n1);
    Local StringVar b2 := ToBin(n2);
    Local NumberVar l1 := length(b1);
    Local NumberVar l2 := length(b2);
    Local NumberVar lng := IIF(l1 > l2, l1, l2);
    Local StringVar x;
    Local StringVar y;
    Local StringVar z := "";
    Local NumberVar i;
    For i := lng To 1 Step -1 Do
    (
        x := "0";
        If (l1 >= i) Then
            x := Mid(b1, (l1-i)+1, 1);
        y := "0";
        If (l2 >= i) Then
            y := Mid(b2, (l2-i)+1, 1);
        z := z & IIF(x=y And x="1","1","0");
    );
    ToNum(z);
)

Function Name: BitXOr
Function (NumberVar n1, NumberVar n2)
(
    n1 + n2 – (BitAnd(n1, n2) * 2)
)

Function Name: BitOr
Function (NumberVar n1, NumberVar n2)
(
    n1 + n2 – BitAnd(n1, n2)
)

Example

BitAnd(1, 5)  // = 1
BitXOr(1, 5)  // = 4
BitOr(1, 5)  // = 5