Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Report вложенные nested таблицы / 6 сообщений из 6, страница 1 из 1
10.01.2014, 13:37
    #38521860
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Report вложенные nested таблицы
Привет.

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

Код: 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
10.01.2014, 13:47
    #38521872
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Report вложенные nested таблицы
Типа такого

...
Рейтинг: 0 / 0
11.01.2014, 00:44
    #38522696
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Report вложенные nested таблицы
Неужто никто не делал?
...
Рейтинг: 0 / 0
11.01.2014, 13:12
    #38522891
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Report вложенные nested таблицы
Решил вопрос через 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
11.01.2014, 13:55
    #38522910
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Report вложенные nested таблицы
И конечно же оно не работает, т.к. 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
11.01.2014, 14:41
    #38522938
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Report вложенные nested таблицы
Наткнулся в инете на ту же проблему:

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


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