Страница 1 из 1

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

Добавлено: 17 авг 2011, 04:38
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"

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

Добавлено: 17 авг 2011, 11:01
John™
Неужели никто не сталкивался с такой задачей?
Или может надо задать этот вопрос в ветке по .NET?

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

Добавлено: 18 авг 2011, 06:35
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;
                        //теперь делать что-нибудь с этим значением
                    }
                }
            }
Спасибо.

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

Добавлено: 18 авг 2011, 07:40
John™
Спасибо.

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

Добавлено: 18 авг 2011, 09:53
HighAley
Мы всегда рады вам помочь.

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

Добавлено: 23 авг 2011, 04:34
John™
Еще вопрос вдогонку:
В отчете есть таблица с именем SettingsTable. Когда я её пытаюсь найти в коде по имени тем способом, который приведен выше, оказывается, что имя у неё вовсе не SettingsTable, а SettingsTable_DB
Что это значит и как с этим бороться? Какие еще компоненты отчета могут произвольно менять свои имена?

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

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

Спасибо.

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

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

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

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

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

Report
    RenderedPage
        Table
        Cell
Могу ли я как-то узнать какой таблице принадлежит ячейка уже в отрендереном отчете?

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

Добавлено: 29 авг 2011, 18:36
Jan
Здравствуйте,

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

Спасибо.