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

Crystal reports 通过XSD发送给Crystal Reports的值为false的数据库字段被评估为true,crystal-reports,Crystal Reports,我开发的应用程序使用Crystal Reports向用户呈现报告。我使用的是Visual2010,但该报告是几年前的一位员工使用Visual2005创建的 基本设置是,客户机应用程序向使用xsd的服务器发出请求,xsd定义了它发送回的数据集。一般来说,这项工作和预期的一样,但我在评估布尔值时遇到了一些问题 一个最近的任务考虑添加一个字段名为TrePealDayDataDataSet的数据集,它控制是否应该打印某些数字,这取决于日期是否是一个常规的工作日,或者有一些特殊的局部含义,这可能会影响采样

我开发的应用程序使用Crystal Reports向用户呈现报告。我使用的是Visual2010,但该报告是几年前的一位员工使用Visual2005创建的

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

一个最近的任务考虑添加一个字段名为TrePealDayDataDataSet的数据集,它控制是否应该打印某些数字,这取决于日期是否是一个常规的工作日,或者有一些特殊的局部含义,这可能会影响采样数据。数据总是在某些公式中使用,因此我不能将其从数据集中排除

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

if {Header.TrueWeekday} then
     CStr({Detail.Flow})
else
     ""
其结果是,无论TrueWeekday中的值是false还是true,都会显示流。我调试了服务器,以验证变量确实获得了预期值,因此问题发生在Crystal Reports中,或者在向Crystal Reports传输数据时

为了在任务的时间限制内解决这个特殊问题,我将字段更改为字符串类型并编写了

if {Header.TrueWeekday} = "false" then
     CStr({Detail.Flow})
else
     ""
这很有魅力

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


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

Header.TrueWeekday
可能是作为字符串传递的,因此当您执行
时,如果{Header.TrueWeekday}
它将字符串作为布尔值进行测试,在这种情况下,如果字符串包含任何它计算为true的内容,从而导致您的问题

在另一个项目中的工作使我意识到.Net可能正在将布尔值序列化为文本字符串true/false。如果Crystal Reports执行草率导入并仅检查 输入!=0
在传输后,您将得到true和false映射为true的结果。

为什么会发生这种情况?XSD使用布尔类型,Crystal Reports将该类型列为布尔类型。我们的目的不是质疑API设计师的宏伟计划,或者说,我不知道为什么会发生这种情况,只是看起来这是导致问题的原因。我担心更多的是从结果中推测原因