Как из кода получить значение подставляемое в ячейку таблицы?

Обсуждение Stimulsoft Reports.WPF
Ответить
John™
Сообщения: 11
Зарегистрирован: 17 авг 2011, 04:25

Как из кода получить значение подставляемое в ячейку таблицы?

Сообщение John™ »

В отчете есть таблица в ячейке которой вставлен текст {Источник.Значение}
Соответственно, при отображении отчета в ячейке появляется реальное значение (допустим 50).
Как получить это значение в своей программе?

Пробовал так:

Код: Выделить всё

StiReport report = new StiReport();
report.Load("Report.mrt");
report.ShowWithWpf();

StiTableCell cell = report.GetComponentByName("Table1_Cell38") as StiTableCell;
string value = cell.Text; // возвращает {Источник.Значение}, а не "50"
John™
Сообщения: 11
Зарегистрирован: 17 авг 2011, 04:25

Как из кода получить значение подставляемое в ячейку таблицы?

Сообщение John™ »

Неужели никто не сталкивался с такой задачей?
Или может надо задать этот вопрос в ветке по .NET?
Ivan
Сообщения: 641
Зарегистрирован: 10 авг 2006, 05:40
Откуда: Stimulsoft Office

Как из кода получить значение подставляемое в ячейку таблицы?

Сообщение Ivan »

Здравствуйте.

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

Команда report.GetComponentByName() возвращает компонент из шаблона (первый экземпляр). Чтобы получить второй экземпляр, надо использовать команду:

Код: Выделить всё

     rep.RenderedPages.GetComponentByName();
Еще один нюанс: если компонент лежит на бэнде, то в построенном отчете будет столько экземпляров этого компонента, сколько раз выводился бэнд. И все эти компоненты будут иметь одно и то же имя. Поэтому команда вернет только первый из этих компонентов. Чтобы получить значения всех компонентов, можно использовать следующий код:

Код: Выделить всё

            foreach (StiPage page in rep.RenderedPages)
            {
                foreach (StiComponent comp in page.Components)
                {
                    if (comp.Name == "Table1_Cell38")
                    {
                        string text = (comp as StiText).Text;
                        //теперь делать что-нибудь с этим значением
                    }
                }
            }
Спасибо.
John™
Сообщения: 11
Зарегистрирован: 17 авг 2011, 04:25

Как из кода получить значение подставляемое в ячейку таблицы?

Сообщение John™ »

Спасибо.
HighAley
Сообщения: 1998
Зарегистрирован: 08 июн 2011, 11:36
Откуда: Stimulsoft Office

Как из кода получить значение подставляемое в ячейку таблицы?

Сообщение HighAley »

Мы всегда рады вам помочь.
John™
Сообщения: 11
Зарегистрирован: 17 авг 2011, 04:25

Как из кода получить значение подставляемое в ячейку таблицы?

Сообщение John™ »

Еще вопрос вдогонку:
В отчете есть таблица с именем SettingsTable. Когда я её пытаюсь найти в коде по имени тем способом, который приведен выше, оказывается, что имя у неё вовсе не SettingsTable, а SettingsTable_DB
Что это значит и как с этим бороться? Какие еще компоненты отчета могут произвольно менять свои имена?
HighAley
Сообщения: 1998
Зарегистрирован: 08 июн 2011, 11:36
Откуда: Stimulsoft Office

Как из кода получить значение подставляемое в ячейку таблицы?

Сообщение HighAley »

Здравствуйте.
[quote="John"™]Еще вопрос вдогонку:
В отчете есть таблица с именем SettingsTable. Когда я её пытаюсь найти в коде по имени тем способом, который приведен выше, оказывается, что имя у неё вовсе не SettingsTable, а SettingsTable_DB
Что это значит и как с этим бороться? Какие еще компоненты отчета могут произвольно менять свои имена?[/quote]
Компонент "Таблица" является самостоятельным компонентом только в дизайнере.
При построении отчета таблица разбивается на отдельные бэнды - датабэнды и связанные с ним headers/footers. Имена этих бэндов состоят из исходного имени таблицы плюс тип бэнда, например для датабэнда - "_DB".
Также изменяются имена у контейнеров, которые разбиваются на нексолько страниц - "Breaked" и "Continued"

Спасибо.
John™
Сообщения: 11
Зарегистрирован: 17 авг 2011, 04:25

Как из кода получить значение подставляемое в ячейку таблицы?

Сообщение John™ »

Еще вопрос:
В отчете существует иерархия элементов. Например, ячейка является дочерним элементом таблицы, которая в свою очередь вставлена в страницу. Т.е. мы имеем:

Код: Выделить всё

Report
    Page
        Table
            Cell
С использованием свойств StiContainer.Components и StiComponent.Parent я могу ходить по этой иерархии.
Однако после рендеринга отчета (когда я получаю список компонентов через свойство StiReport.RenderedPages) такой иерархии уже не существует - все компоненты в качестве родителя ссылаются на Page.

Код: Выделить всё

Report
    RenderedPage
        Table
        Cell
Могу ли я как-то узнать какой таблице принадлежит ячейка уже в отрендереном отчете?
Jan
Сообщения: 495
Зарегистрирован: 19 фев 2009, 11:14

Как из кода получить значение подставляемое в ячейку таблицы?

Сообщение Jan »

Здравствуйте,

Можно использовать имя компонента построенной таблицы, оно остается таким же. Используя это имя произвести поиск по шаблону отчета.

Спасибо.
Ответить