在xml文件中定义列类型以用作Crystal报表数据源

时间:2013-02-19 13:07:22

标签: xml crystal-reports

我使用这个XML文件作为我的水晶报告的数据源。

<Person>
    <name></Name>
    <Family></Family>
    <BirthDate type="datetime"></BirthDate>
</Person>

但是当我使用它作为数据源并且crystal报表引擎根据给定的XML生成我的报表列时,我看到BirthDate字段是一个字符串。我无法更改其类型,我认为我的XML格式可能存在问题

有什么机构可以帮助我吗?! 感谢

2 个答案:

答案 0 :(得分:1)

可能为时已晚,但我希望这有助于那些寻求答案的人。 不使用xml,而是使用xsd。按照你的例子,它就像这样:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Person" nillable="true" type="Person" />
  <xs:complexType name="Person">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" />
      <xs:element minOccurs="0" maxOccurs="1" name="Family" type="xs:string" />
      <xs:element minOccurs="0" maxOccurs="1" name="BirthDate" type="xs:dateTime" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>

Crystal Report将正确识别出生日期的类型。

答案 1 :(得分:0)

您可以使用Crystal公式转换“字符串”,而不是使用XML中的类型。

If IsDateTime({XML.BirthDate})
    Then CDateTime({XML.BirthDate})
    Else CDateTime(0)

我从未在Crystal中使用过XML源代码,因此我不完全确定这些字段在公式编辑器中的显示方式。 “{XML.BirthDate}”可能采用不同的格式。

if / else语句使得它不会在NULL值(或非DateTime字符串)上崩溃。它们将显示为DateTime 0:“12/30/1899 12:00:00 AM”