Microsoft Reporting: Установка параметров подчиненного отчета в коде

Это может сработать для вас (GNU sed):

sed ':a;/)$/!b;n;/^{/!ba;c{ time_exe(__func__, cl(clock()));' file

Если текущая строка не заканчивается на ), выход из любой дальнейшей обработки с помощью sed. В противном случае выведите текущую строку и прочитайте следующую. Если эта строка не начинается с проверки { с начала, в противном случае измените ее на желаемый формат.

Требуемый формат также может быть добавлен или вставлен, см. Ниже:

sed ':a;/)$/!b;n;/^{/!ba;a{ time_exe(__func__, cl(clock()));' file

Или,

sed ':a;/)$/!b;n;s/^{/& time_exe(__func__, cl(clock()));/;Ta' file
10
задан Svish 12 October 2009 в 06:32
поделиться

5 ответов

После взгляда и взгляда, я пришел к выводу, что установка параметров подчиненного отчета, в коде, не возможна. Если Вы не делаете что-то полагает как запуск, редактируя xml определения отчета перед загрузкой его или что-то как этот.

(Но если кто-то еще должен знать, что я неправ, ответьте, вызовите, мне все еще очень любопытно знать!)

0
ответ дан 4 December 2019 в 03:17
поделиться

Вы могли добавить их через определение XML. Я использую xml для создания всего отчета на основе выбранных подчиненных отчетов и других опций. Я могу вставить некоторый код в здесь прибывшем в понедельник, если требуется посмотреть на это как на возможное решение.

Править: Можно установить значения на подчиненном отчете в XML перед развертыванием отчета. Это не очень гибко, и я делаю предположение, что, если Вы хотите запросить эти значения, Вам, скорее всего, будут нужны они на родительском отчете.

Если Вы хотите видеть то, на что похож XML, добавьте подчиненный отчет, введите значения для него в свойствах подчиненного отчета> параметры, то сделайте код представления.

<Subreport Name="subreport1">
    <Parameters>
      <Parameter Name="StartDate">
        <Value>=Parameters!StartDate.Value</Value>
      </Parameter>
      <Parameter Name="EndDate">
        <Value>1/1/2009</Value>
      </Parameter>

Вместо того, чтобы использовать =Parameters! StartDate. Значение я предполагаю Вас, хотело бы поместить фактическое значение как на EndDate.

0
ответ дан 4 December 2019 в 03:17
поделиться

Это действительно работает, но это уверенный является дотошным.

Первая вещь, которую я рекомендую, состоит в том, чтобы разработать Ваши отчеты как .rdl. Намного легче протестировать отчеты этот путь. Можно также разбудить набор параметров подчиненного отчета и протестированный как rdl, удостоверившись, что каждый параметр подчиненного отчета также определяется как параметр родительского отчета. После того как Вы получаете отчеты - включая подчиненные отчеты - работа таким образом, можно переименовать .rdl к rdlc и добавить rdlc файлы к Проекту ReportViewer. Никакие дальнейшие изменения не требуются. Используйте названия rdl источников данных как имена источников данных в Вашем коде для обеспечения данных отчету в обработчике событий SubreportProcessing.

Вы не присваиваете значения переданному параметру. Подчиненный отчет использует их как есть. (Походит на шаг, который Вы пропускаете, добавляют параметры к родительскому отчету, а также подчиненный отчет, как упомянуто выше.) Можно оценить параметры и использовать их в качестве параметров запроса для получения источника данных, который Вы добавите. Необходимо думать об источнике данных как на неоткрытом размере для подчиненного отчета. Необходимо будет ввести по абсолютному адресу вокруг при отладке в конечном счете обработчика для наблюдения то, что я имею в виду. Некоторые значения в Вашем приложении будут легко доступны, другие, которых Вы используете легко в другом месте, бросят объект, не найденный исключениями. Например, я создаю набор данных в экземпляре класса, созданного на моих приложениях основная форма. Я использую набор данных всюду по своему приложению. В обработчике событий SubreportProcessing я не могу использовать общий набор данных, таким образом, я должен создать новый экземпляр таблицы, я нуждаюсь для отчета и заполняю его. В основном отчете я смог бы получить доступ к общему набору данных. Существуют другие ограничения как это. Просто должны пробраться Ваш путь через.

Вот обработчик событий SubreportProcessing из рабочего приложения VB.NET ReportViewer. Шоу несколько различных способов получить источник данных для подчиненного отчета. subreport1 создает одну таблицу данных строки из бизнес-объектов приложения, subreport2 обеспечивает данные, которых отчет требует без параметра, subreport3 является ложью subreport2, но оценивает один из параметров, переданных подчиненному отчету для использования в значении даты, требуемом запросом, который создает ReportDataSource.

    Public Sub SubreportProcessingEventHandler(ByVal sender As Object, _
                                               ByVal e As SubreportProcessingEventArgs)
    Select Case e.ReportPath
        Case "subreport1"
            Dim tbl As DataTable = New DataTable("TableName")
            Dim Status As DataColumn = New DataColumn
            Status.DataType = System.Type.GetType("System.String")
            Status.ColumnName = "Status"
            tbl.Columns.Add(Status)
            Dim Account As DataColumn = New DataColumn
            Account.DataType = System.Type.GetType("System.String")
            Account.ColumnName = "Account"
            tbl.Columns.Add(Account)
            Dim rw As DataRow = tbl.NewRow()
            rw("Status") = core.GetStatus
            rw("Account") = core.Account
            tbl.Rows.Add(rw)
            e.DataSources.Add(New ReportDataSource("ReportDatasourceName", tbl))
        Case "subreport2"
            core.DAL.cnStr = My.Settings.cnStr
            core.DAL.LoadSchedule()
            e.DataSources.Add(New ReportDataSource("ScheduledTasks", _
                                                   My.Forms.Mother.DAL.dsSQLCfg.tSchedule))
        Case "subreport3"
            core.DAL.cnStr = My.Settings.cnStr
            Dim dt As DataTable = core.DAL.GetNodesForDateRange(DateAdd("d", _
                                                                          -1 * CInt(e.Parameters("NumberOfDays").Values(0)), _
                                                                          Today), _
                                                                  Now)
            e.DataSources.Add(New ReportDataSource("Summary", dt))
    End Select
End Sub
2
ответ дан 4 December 2019 в 03:17
поделиться

Svish - Я не уверен, из-за какой стороны инфраструктуры Вы испытываете затруднения.

Для добавления параметров к родительскому отчету открывают его, затем щелкают правой кнопкой по подчиненному отчету и выбирают Свойства> Параметры.

Можно затем определить названия параметра и присвоить им значение, например.

Parameter Name | Parameter Value
---------------+---------------------
MyParameter    | =Fields!Params.Value

Таким образом на этой стороне инфраструктуры параметров получают их значение от родительского источника данных отчетов.

Для добавления параметров к подчиненному отчету открывают подчиненный отчет и из Отчета о выборе панели инструментов> Параметры Отчета

Здесь Вы определяете параметр для получения параметра из родительского отчета, например.

Name      | myParameter
----------+---------------------
Data Type | String

Поскольку, на что это походит, Вы хотите сделать разве, Вы не можете покончить с подчиненным отчетом и просто иметь один отчет так или иначе? Информация Вы пытаетесь перенести отчет, звучит идеальной для только включая в заголовках и нижних колонтитулах отчета.

-1
ответ дан 4 December 2019 в 03:17
поделиться

У меня была аналогичная проблема: мне нужно было передать значение Properties.Settings .... в начало пути в базе данных. Для этого мне пришлось установить свойство в основном отчете и использовать это свойство для установки второго свойства во вложенном отчете. Установка основного свойства, в свою очередь, устанавливает свойство подотчета. ВЫ МОЖЕТЕ установить главное свойство в коде следующим образом:

Предположим, у вас есть ReportViewer с именем rv, тогда мы должны кодировать:

var rp = new ReportParameter("MainReportParamName", Properties.Settings....);
rv.LocalReport.SetParameters(new ReportParameters[] { rp });
1
ответ дан 4 December 2019 в 03:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: