0

它是 VS 2010 版本。

CR 能够接受 NULL 值,因为当它提示我输入参数值时,有一个可爱的小复选框,上面写着“设置为 NULL”。这是我需要的行为。

但是,我几乎从不这样调用报告,我是用代码来做的。所以,如果用户没有为参数提供值,我想在它的位置传递 NULL 值,所以我可以在报告本身中做一些不同的事情。

我已经在网上搜索了很长时间,主要是在 CR 论坛上,我有很多解决方案,但没有一个真正有效。

这是其中之一:

ParameterDiscreteValue objDiscreteValue = new ParameterDiscreteValue();
objDiscreteValue.Value = null;
rptH.SetParameterValue(parName, new ParameterDiscreteValue(objDiscreteValue));

CR 说您没有为 ... 参数提供值。

我通过创建双参数来解决它。一个实参,一个卫星参(布尔值,只看实参是否有值)。它有效。但这很乏味,并且使我的泛型(根据报告元数据自动提示参数)非常困难。

我希望有人已经深入挖掘以找到解决此问题的方法。

问候,

4

2 回答 2

0

我用 VS.2005 做到了这一点,但我认为这是同样的问题。根据经验,我们对数据类型没有任何问题VARCHAR,但是当我们使用Number数据类型时,问题就出现了。

对于VARCHAR数据类型,您只需将一个空字符串传递给参数。例如,我在 SQL Server 中有参数,其数据类型VARCHAR如下:

MyParamFields.Add(AddParamReport("@TheActiveYear", mTahunAktiv, ParameterValueKind.StringParameter))

在这种情况下,如果我想传递值,我只需在我的 VB.Net 代码中NULL为变量提供空字符串,如下所示。并且 CR 建议将此作为空值并给出正确的结果。mTahunAktivmTahunAktiv=""

对于一种Number数据类型,它有点棘手。我认为这是目前最好的方法,就像你在谷歌上搜索过但还不知道解决方案一样。

例如,在我的情况下,我有一个参数用于传递数据类型为数字值的月份SMALLINT,但有时用户需要将值作为NULL. 为了克服这个问题,我只是向该参数发送了一个值,例如 13,但在此之前,您必须在 SQL QUERY 中处理它,如果您将 13 值赋予该参数,它将变为 NULL。为此,我使用带有动态过滤参数的存储过程。对我来说,这可以解决我的问题。

我不确定你是否会明白我的意思,但我希望这个小小的经验可以帮助你解决你的问题。

于 2012-09-27T09:09:53.943 回答
0

我偶然发现了来自 ADO.NET DataSets 的 DBValue.Null,它促使我尝试将其传递给 Crystal,瞧,它起作用了。像这样:

ParameterDiscreteValue objDiscreteValue = new ParameterDiscreteValue();
objDiscreteValue.Value = DBNull.Value;
rptH.SetParameterValue(parName, objDiscreteValue);

我希望这对某人有所帮助,但我认为这应该记录在某个地方。

此致,

于 2012-11-13T08:09:21.163 回答