Как закодировать строки набора данных в службах Reporting rdl custom code

Как я могу перебирать строки набора данных в пользовательском коде?
У меня есть отчет, содержащий набор данных. Я передаю набор данных в качестве параметра для функции пользовательского кода. Но что тогда? Где ссылка на доступные участники и т.д.?
Вот мой примерный образец кода:

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

Обратите внимание: это будет очень простой script (если он будет работать), поэтому я не хочу входить в пользовательские сборки и т.д.

Ответы

Ответ 1

Я думаю, вы получили свой ответ:

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

Были две важные части информации, которые я смог понять из приведенной выше ссылки:

Во-первых, набор данных в службах Reporting Services - это не тот же тип объекта, что и набор данных ADO.Net. Набор данных отчета - это внутренний объект, управляемый средой SSRS (она фактически получена из объекта DataReader), а не структура XML, содержащая данные и т.д., И не может быть передана в пользовательский код отчета.

Во-вторых, было опубликовано решение о том, как можно перебирать строки из набора данных в пользовательском коде отчета, "преобразовывая" набор данных в многозначный параметр (или если требуется несколько полей, преобразуя его в несколько многозначных параметров)

Многозначный параметр отчета должен иметь следующие характеристики:

Hidden = True, Разрешить несколько значений = True

Доступные значения: выберите нужный набор данных. Выберите идентификатор для поиска как идентификатор значения и поле, которое вы хотите открыть как поле метки.

Вкладка "Значения по умолчанию": получить значения из запроса. Выберите тот же набор данных, который выбран в доступной вкладке "Значения". Поле значений - то же, что вы выбрали для идентификатора значения.

Установите параметр, чтобы никогда не обновлять (или он будет загружать данные из каждой итерации другого параметра).

Теперь идея состоит в том, чтобы сделать этот параметр "доступным для поиска". С этого момента вы выставили набор данных в виде массива в многозначном параметре.

Теперь в пользовательский код вставьте следующий код:

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

Вы могли делать то, что хотели?