powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Report вложенные nested таблицы
6 сообщений из 6, страница 1 из 1
Report вложенные nested таблицы
    #38521860
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

Есть пара классов для отображения в репорте

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class Order
{
     public object codeName {set;get;}
     public object comment {set;get;}
     public List<Material> materials {set;get;}
}

public class Material
{
      public object Name {set;get;}
      public object Plan {set;get;}
      public object Fakt {set;get;}
      public object Diff {set;get;}
}



Рисую репорт, добавляю таблицу. Связываю с DataSet Order. Теперь в одну из ячеек добавляю еще одну таблицу, и хочу, чтобы она связывалась с List<Material> materials для каждого объекта Order. Но студия не дает поменять мне датасет для встроенной таблицы, и доступ к полю Order.materals не предлагает. Как такие штуки делаются? Спасибо
...
Рейтинг: 0 / 0
Report вложенные nested таблицы
    #38521872
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Типа такого

...
Рейтинг: 0 / 0
Report вложенные nested таблицы
    #38522696
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неужто никто не делал?
...
Рейтинг: 0 / 0
Report вложенные nested таблицы
    #38522891
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил вопрос через Subreports.

1. Делаем родительский репорт MainReport, в котором рисуем таблицу, подключенную к датасету Order. Добавляем строчку, в нее вставляем Subreport.

2. Делаем дочерний репорт ChildReport, в нем рисуем таблицу для датасета Material.

3. В MainReport для Subreport указываем св-во ReportName = ChildReport.

4. Добавляем код:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public FormReportPeriod()
        {
            .....
            reportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(SetSubDataSource);
            
        }

public void SetSubDataSource(object sender, SubreportProcessingEventArgs e)
        {
            var mainSource = ((LocalReport)sender).DataSources["DataSetPeriodItem"];
            var subSource = ((List<ReportPeriodRecord>)mainSource.Value).First().materials;
            e.DataSources.Add(new ReportDataSource("DataSetPeriodMaterials", subSource));
        }
...
Рейтинг: 0 / 0
Report вложенные nested таблицы
    #38522910
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И конечно же оно не работает, т.к. First(). Как получить доступ к текущей обрабатываемой записи в репорте - инфы нет. Пришлось ставить костыль

Код: c#
1.
2.
3.
4.
5.
6.
public void SetSubDataSource(object sender, SubreportProcessingEventArgs e)
        {
            var mainSource = ((LocalReport)sender).DataSources["DataSetPeriodItem"];
            var subSource = ((List<ReportPeriodRecord>)mainSource.Value).ElementAt(index++).materials;
            e.DataSources.Add(new ReportDataSource("DataSetPeriodMaterials", subSource));
        }



уповая, что index будет соответствовать правде. И тут - сюрприз! - оказалось, по какой-то не ясной причине, датасурс для сабрепорта в отчете берется всегда первый, т.е. тот, который первым обработался на событии!
...
Рейтинг: 0 / 0
Report вложенные nested таблицы
    #38522938
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наткнулся в инете на ту же проблему:

авторAfter some poking around and tinkering with my code, I found a workaround. The solution is to create a dummy parameter in the subreport, which you then need to bind to a field in the tablix dataset. Any field will do as long as both the subreport parameter and the tablix dataset field are type-compatible. You don't have to do anything with the parameter in the subreport, but now SSRS displays multiple instances of the same subreport, a separate one for each row in the tablix.


и правда - добавил к сабрепорту параметр, связал его с одним из полей из главного репорта - и теперь в каждом сабрепорте стали выводиться актуальные данные! lol wooooooooot?!
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Report вложенные nested таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]