我需要将CR报告迁移到RS。
我有两个方法,基本上是两个查询,一个叫做“Products”,另一个叫做“Volume”。
这两个数据集都有一个名为ID的字段。 想法是计算ProductsID = VolumeID。我可以使用查找作为RS中的表达式,当查找不等于Nothing时计数吗?或者我必须做一个代码才能做到这一点?
编辑: 让我添加更多信息。 Crystal Report正在Web应用程序的数据层中管理这些内容,如下所示:
DataRow drVol = vols.Rows.Find(new Object[] { id, idEzd });
if (drVol != null)
{
if (drVol["Volume"] != System.DBNull.Value)
cRow.Volume = (isNormalReport ? Convert.ToDecimal(drVol["Volume"]) : Convert.ToDecimal(drVol["Volume"]));
else
cRow.Volume = 0;
dset.Compradores.Rows.Add(cRow);
}
所以在这种情况下,我确认RS给了我X行数,而CR给了我另外的行数。
想法是在RS内的表达式或VB代码上复制它。
如您所见,我们必须过滤drVol != null
,RS将带来所有行。
我知道在这种情况下可以使用Lookup函数:
Lookup(Fields!id.Value & Fields!idEzd.Value, Fields!id.Value & Fields!idEzd.Value,Fields!Givemethisfield.Value,"Dataset")
但我可以在代码中使用此Lookup表达式来计算吗? 计数器应该是这样的(然后我应该添加查找或if等于vlookup,代码可以看到两个数据集吗?):
Dim count=0 as integer
Public Function Counter() as Integer
count = count + 1
return count
End Function
Public Function GetCounter () as integer
return count
End Function
然后使用表达式
创建一个计算字段,例如“Counter”=Code.Counter()
然后计算该计算字段的总和:
=Sum(Fields!Counter.Value)
但是没有工作,甚至连柜台都没有给我0。
很抱歉,如果我在Visual Basic代码中出错,我不会在Visual中编程。
EDIT2: 我在MSDN上看到了一些解决方法,例如:
Lookup(Fields!id.Value & Fields!idEzd.Value, Fields!id.Value & Fields!idEzd.Value,Fields!Givemethisfield.Value,"Dataset").Lenght
因为查找是一个数组而有意义。
问题是,如果我选择一个范围或另一个范围,我仍然会遇到一些问题,例如,如果字段id
和idezd
位于数据集1上,则无法看到某些字段Givemethisfield
在数据集2上,它将看不到id,idEzd或Givemethisfield。