通过XSD发送到Crystal Reports的false为false的数据库字段被评估为true

时间:2011-03-11 10:49:29

标签: crystal-reports

我正在处理的应用程序是使用Crystal Reports向用户显示报告。我使用的是Visual 2010,但该报告是由几位前几年使用Visual2005的员工创建的。

基本设置是客户端应用程序向使用xsd的服务器发出请求,该xsd定义了它发回的数据集。通常这项工作与预期一样,但我在评估布尔值时遇到了一些问题。

最近的任务考虑添加一个字段名称为TrueWeekday的数据集,该字段名称TrueWeekday控制是否应打印某些数字,具体取决于日期是否是正常的工作日或具有可能影响采样数据的某些特殊本地含义。数据总是在某些公式中使用,因此我无法将其从数据集中排除。

我的第一次尝试涉及将新字段定义为布尔值,并在我编写的报告的公式中

if {Header.TrueWeekday} then
     CStr({Detail.Flow})
else
     ""

结果是无论TrueWeekday中的值是假还是真,都显示了流程。我对服务器进行了调试,以验证变量是否确实达到了预期值,因此问题发生在Crystal Reports或将数据传输到Crystal Reports中。

要在任务的时间约束内解决这个特殊问题,我将字段更改为类型字符串并写入

if {Header.TrueWeekday} = "false" then
     CStr({Detail.Flow})
else
     ""

这就像一个魅力。

我的问题并不紧急,因为我有一个可行的解决方案,但我担心这个问题可能会产生更微妙的数据严重性问题。

这可能是什么原因以及如何解决?

2 个答案:

答案 0 :(得分:0)

Header.TrueWeekday可能是作为一个字符串传递的,所以当你if {Header.TrueWeekday}测试一个字符串作为布尔值时,如果字符串包含任何值,它会计算为true,从而导致你的问题< / p>

答案 1 :(得分:0)

在另一个项目中工作让我意识到.Net可能将布尔值序列化为文本字符串true / false。如果那时Crystal Reports进行了粗略的导入,只检查 输入!= 0 转移后,您将获得true和false映射为true的结果。