我想根据某些条件(例如
)更改Crystal报表中Object的背景颜色 if (({DataTableCable.ColumnChange} and 4) = 4) then
crGreen
DataTableCable.ColumnChange是一个字段包含一个数字,我想做一个按位而用4,如果结果为4那么改变对象的背景 但我收到以下错误 “需要布尔值” 怎么应该做一个按位和水晶报告?
答案 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