如何在Reporting Services rdl自定义代码中循环数据集行

kco*_*ode 14 custom-code reporting-services

如何在自定义代码中循环遍历数据集的行?
我有一个包含数据集的报告.我将数据集作为参数传递给自定义代码函数.那么呢?关于可用成员等的参考在哪里?
这是我到目前为止的虚拟示例代码:

Public Function ShowParameterValues(ByVal ds as DataSet) as object()
    Dim codes() As Object
    Array.Resize(codes,dc.???.Count)
    codes(0)=ds??(field???)(row??)
    return codes
End Function
Run Code Online (Sandbox Code Playgroud)

请注意:这将是一个非常简单的脚本(如果它可以工作),所以我不想进入自定义程序集等.

Anj*_*wal 3

我想你已经在以下位置得到了答案:

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/a7d59224-0ee5-491e-883b-2e5fcb3edeab/iterate-through-rows-of-dataset-in-reports-custom-code?forum= sql报告服务

我从上面的链接中掌握了两条重要信息:

首先,Reporting Services 中的数据集与 ADO.Net 数据集不是同一类型的对象。报表数据集是由 SSRS 运行时管理的内部对象(它实际上是从 DataReader 对象派生的),而不是包含数据表等的 XML 结构,并且不能传递到报表的自定义代码中。

其次,发布了一个解决方案,说明如何通过将数据集“转换”为多值参数(或者如果需要多个字段,则将其转换为多个多值参数)来迭代报告自定义代码中的数据集行:

多值报告参数必须具有以下特征:

隐藏 = True,允许多个值 = True

可用值选项卡:选择所需的数据集。选择可搜索的 id 作为值 id,并选择要公开的字段作为标签字段。

默认值选项卡:从查询中获取值。选择与可用值选项卡中选择的相同数据集。值字段与您为值 ID 选择的字段相同。

将参数设置为永不刷新(否则它将从另一个参数的每次迭代中加载数据)。

现在,我们的想法是让这个参数“可搜索”。从此时起,您将数据集公开为多值参数中的数组。

现在在自定义代码中插入以下代码:

function GetDataSetLabelFromValue( id as integer) as String
dim i as integer
i = 0
for i = 1 to Report.Parameters!YourParameter.Count()
if Report.Parameters!YourParameter.Value(i) = id then
    GetDataSetLabelFromValue = Report.YourParameter!ReportParameter1.Label(i)
    Exit For
End if
next i
End Function
Run Code Online (Sandbox Code Playgroud)

你能做你想做的事吗?