Не приятный момент открытия отчета

Обсуждение Stimulsoft Reports.NET
Ответить
Аватара пользователя
compositum
Сообщения: 252
Зарегистрирован: 15 янв 2008, 15:12
Откуда: Санкт-Петербург

Не приятный момент открытия отчета

Сообщение compositum »

Создал mrt-файл отчета. В отчете имеется 5 листов и стартовая форма с чекбоксами, установкой значений которых пользователь указывает какие из 5-ти отчетов ему нужны, а так же какие из бендов в указанных отчетах нужно скрыть/показать. Все работает, но есть один не приятный момент:
В клиентском приложении юзер кликает мышью на кнопке, которая запускает отчет (report.Show()). Открывается диалоговое окошко, юзер устанавливает комбинацию галочек и жмет кнопку окей. В результате получает отчет (или группу отчетов) согласно установленным настройкам. аке. закрывает отчет. Снова жмет на кнопку открытия отчета, так же открывается окно формы с чекбоксами, юзер снова устанавливает нужные галочки (но уже другую комбинацию) и получаю ерунду, а именно:
пустые листы. Если закрыть клиентское приложение, затем снова открыть его и установить иную комбинацию галочек - снова все нормально. но это все работает только в первый раз открытия отчета. Почему? Для наглядности выкладываю

Данные (xsd-схема и xml-данные) и Файл отчета (mrt-файл)
Edward
Сообщения: 930
Зарегистрирован: 09 июн 2006, 12:23

Не приятный момент открытия отчета

Сообщение Edward »

Если отчет уже был построен, у него установлено свойство IsRendered = true. Метод Show() просто отображает коллекцию построенных страниц в этом случае.
Если же перед вызовом Show() присвоить report.IsRendered = false, то произойдет перепостроение отчета с вызовом опять всех диалоговых форм.

Если эти действия не исправят ситуацию, покажите, пожалуйста код, который Вы вызываете для перегенерации отчета и группы отчетов.

Спасибо.
Edward
Сообщения: 930
Зарегистрирован: 09 июн 2006, 12:23

Не приятный момент открытия отчета

Сообщение Edward »

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

Если отчет уже был построен, у него установлено свойство IsRendered = true. Метод Show() просто отображает коллекцию построенных страниц в этом случае.
Если же перед вызовом Show() присвоить report.IsRendered = false, то произойдет перепостроение отчета с вызовом опять всех диалоговых форм.

Если эти действия не исправят ситуацию, покажите, пожалуйста код, который Вы вызываете для перегенерации отчета и группы отчетов.

Спасибо.
Аватара пользователя
compositum
Сообщения: 252
Зарегистрирован: 15 янв 2008, 15:12
Откуда: Санкт-Петербург

Не приятный момент открытия отчета

Сообщение compositum »

Edward писал(а):Здравствуйте.

Если отчет уже был построен, у него установлено свойство IsRendered = true. Метод Show() просто отображает коллекцию построенных страниц в этом случае.
Если же перед вызовом Show() присвоить report.IsRendered = false, то произойдет перепостроение отчета с вызовом опять всех диалоговых форм.

Если эти действия не исправят ситуацию, покажите, пожалуйста код, который Вы вызываете для перегенерации отчета и группы отчетов.

Спасибо.
не исправят, т.к. у меня уже реализовано в коде то, о чем вы говорите. Показываю код:

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

[STAThread]
        private void openShow()
        {            
            report.IsRendered = false;
            report.Show(true);
        }    
   
        public void Show()
        {
            report.RegData(dsName, ds);
            Thread t1 = new Thread(new ThreadStart(openShow));
            t1.SetApartmentState(ApartmentState.STA);
            t1.Start();            
        }
Вы сможете увидеть пробелему например в таком случае: Запустите мой отчет и в диалоговом окошке выставьте все галочки. Отчет откроется. Закройте его и снова вызовите метод public void Show(), но в этот раз оставьте, включеной только одну галочку - например по механизмам. Вы увидите чистый лист. Но если закрыть приложение, снова открыть его, и теперь уже повторить то же действие - все получится как нужно (правда опять на 1 раз).
Vital
Сообщения: 647
Зарегистрирован: 09 июн 2006, 12:23

Не приятный момент открытия отчета

Сообщение Vital »

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

Лучше всего просто вызывать метод Render перед методом Show.

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