Почему при последующих открытиях отчета не появляется диалоговое окно?

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

Почему при последующих открытиях отчета не появляется диалоговое окно?

Сообщение compositum »

В файле отчета имеется форма с чекбоксами, в зависимости от состояния которых определяется внешний вид отчета.
При первом открытии отчета форма (как и положено) открывается перед появлением результата, дабы предоставить возможность установки нужных галочек. Закрываю отчет. Снова на своей форме жму кнопку создания отчета - отчет открывается в ту же долю секунды, но форма с чекбоксами перед этим уже не появляется. Т.е. установить настройки не представляется возможным - приходится закрывать приложение и запускать снова.

Пробую решить эту проблему. Для начала закинул вызов метода Show() в отдельный поток:

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

[STAThread]
        private void openShow()
        {
            report.Show();
        }
        /// 
        /// Открыть отчет в предварительном просмотре
        /// 
        public void Show()
        {
            report.RegData(dsName, ds);
            Thread t1 = new Thread(new ThreadStart(openShow));
            t1.SetApartmentState(ApartmentState.STA);
            t1.Start();           
        }
в результате все виснет и получаю ошибку:
Попытка выполнения управляемого кода под блокировкой OS Loader. Запуск управляемого кода в пределах функции DllMain или функции инициализации образа может вызвать зависание приложения.
Я что-то не так сделал? Ведь я реализовал тот вариант, что вы предложили для метода Design() - там он работает замечательно, но для Show() - получаю ошибку... Почему?

Вернул все обратно как было...

Подумал, может нужно уничтожить объект? Сделал так:

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

/// 
        /// Открыть отчет в предварительном просмотре
        /// 
        public void Show()
        {
            report.RegData(dsName, ds);
            report.Show();
            report.Dispose(); //добавил эту строку           
        }
Однако диалоговое окно по прежнему открывается только один раз. Если закрываю отчет и снова вызываю его - окно уже не открывается. Как решить данный вопрос?
Vital
Сообщения: 647
Зарегистрирован: 09 июн 2006, 12:23

Почему при последующих открытиях отчета не появляется диалоговое окно?

Сообщение Vital »

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

Пришлите пожалуйста Ваш отчет и покажите код, который используется для отображения отчета.

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

Почему при последующих открытиях отчета не появляется диалоговое окно?

Сообщение compositum »

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

Пришлите пожалуйста Ваш отчет и покажите код, который используется для отображения отчета.

Спасибо.
отправил на support[a]stimulsoft.com отчет и файлы xml и xsd для загрузки из них данных.

показываю код:

В своем классе определил метод, который будет открывать отчет для просмотра:

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

        /// 
        /// Открыть отчет в предварительном просмотре
        /// 
        public void Show()
        {
            report.RegData(dsName, ds);// это объект отчета стимула
            report.Show();
            //report.Dispose();            
        }
в другой сборке использую объект этого класса, и в конце вызываю метод открытия отчета:

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

private void Show_Click(object sender, EventArgs e)
        {            
            try
            {
                obj.Show();  // вот как я запускаю тот самый метод              
            }
            catch (Exception)
            {
                MessageBox.Show("Сначала нужно создать DataSet и залить в него данные",
                    "Внимание!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }            
        }
Аватара пользователя
compositum
Сообщения: 252
Зарегистрирован: 15 янв 2008, 15:12
Откуда: Санкт-Петербург

Почему при последующих открытиях отчета не появляется диалоговое окно?

Сообщение compositum »

В том отчете, что я вам выслал не понятна одна маленькая деталь. на в дизайнере вы увидите, что я создал три листа отчета, так вот на третьем листе по высоте все поля подогнанны впритык, что называется:

Изображение

а на просмотре между строками образуется небольшое пространство:

Изображение

откуда оно берется?

И еще вопрос - если мне нужно не все три листа выводить на предварительный просмотр и печать, только какой-то один из них, или пару, как это сделать?

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

Почему при последующих открытиях отчета не появляется диалоговое окно?

Сообщение Edward »

Вышлите, пожалуйста, еще раз отчет и данные на support[at]stimulsoft.com. По непонятной причине файлы не были получены.

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

Почему при последующих открытиях отчета не появляется диалоговое окно?

Сообщение compositum »

Edward писал(а):Вышлите, пожалуйста, еще раз отчет и данные на support[at]stimulsoft.com. По непонятной причине файлы не были получены.

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

Почему при последующих открытиях отчета не появляется диалоговое окно?

Сообщение Edward »

Измените, пожалуйста, Ваш код следующим образом:

report.Show(true);
report.IsRendered = false;
report.Show(true);

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

Почему при последующих открытиях отчета не появляется диалоговое окно?

Сообщение compositum »

Edward писал(а):Измените, пожалуйста, Ваш код следующим образом:

report.Show(true);
report.IsRendered = false;
report.Show(true);

Спасибо.
да, работает... а вы не могли бы пояснить почему нужна именно такая последовательность?
Edward
Сообщения: 930
Зарегистрирован: 09 июн 2006, 12:23

Почему при последующих открытиях отчета не появляется диалоговое окно?

Сообщение Edward »

Все очень просто. Параметр IsRendered автоматически устанавливается в true после построения отчета. Когда этот параметр выставлен, движок просто отображает коллекцию RenderedPages в Preview. Диалоговые формы в эту коллекцию не входят.

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