Как зациклить строки набора данных в пользовательском коде служб отчетов rdl
Как я могу перебрать строки набора данных в пользовательском коде?
У меня есть отчет, содержащий набор данных. Я передаю набор данных в качестве параметра пользовательской функции кода. Но что тогда? Где ссылка о доступных участниках и т. Д.?
Вот мой примерный пример кода:
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
Обратите внимание: это будет очень простой скрипт (если он будет работать), поэтому я не хочу вдаваться в пользовательские сборки и т. Д.
1 ответ
Я думаю, что вы получили ответ по адресу:
Из приведенной выше ссылки мне удалось понять две важные части информации:
Во-первых, набор данных в службах Reporting Services не является объектом того же типа, что и набор данных ADO.Net. Набор данных отчета - это внутренний объект, управляемый средой выполнения SSRS (он на самом деле является производным от объекта DataReader), а не структура XML, содержащая таблицы данных и т. Д., И он не может быть передан в пользовательский код отчета.
Во-вторых, было опубликовано решение о том, как можно выполнить итерацию по строкам набора данных в пользовательском коде отчета, "преобразовав" набор данных в многозначный параметр (или, если необходимо несколько полей, преобразовав его в несколько многозначных параметров):
Параметр многозначного отчета должен иметь следующие характеристики:
Скрытый = True, Разрешить множественные значения = True
Вкладка "Доступные значения": выберите нужный набор данных. Выберите для поиска идентификатор в качестве значения идентификатора и поле, которое вы хотите выставить как поле метки.
Вкладка "Значения по умолчанию": получение значений из запроса. Выберите тот же набор данных, который был выбран на доступной вкладке "Значения". Поле значения то же, что вы выбираете для значения 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
Вы смогли сделать то, что хотели?