Позвольте перекрыть диалог "отчёт изменён, сохранить? да-нет-отмена"

Обсуждение Stimulsoft Reports.NET
Ответить
ppvlad
Сообщения: 24
Зарегистрирован: 26 янв 2009, 10:35
Откуда: Moscow
Контактная информация:

Позвольте перекрыть диалог "отчёт изменён, сохранить? да-нет-отмена"

Сообщение ppvlad »

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

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

Порылся в исходниках сборки 2008.2.300 и сделал как мне надо, но ведь не сложно предоставить такую возможность изначально?
Некий метод, возвращающий DialogResult, который мог-бы перекрыть разработчик (или событие на эту тему).

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

Позвольте перекрыть диалог "отчёт изменён, сохранить? да-нет-отмена"

Сообщение Edward »

Вы можете использовать свой диалог сохранения в событии ClosingDesigner.

StiOptions.Engine.GlobalEvents.ClosingDesigner

К примеру, так:

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

StiOptions.Engine.GlobalEvents.ClosingDesigner += new CancelEventHandler(GlobalEvents_ClosingDesigner);


        void GlobalEvents_ClosingDesigner(object sender, CancelEventArgs e)
        {
            if (MessageBox.Show("Close?", "ClosingEvent", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1) != DialogResult.OK)
                e.Cancel = true;
            else
            {
                // чтобы не появилось сообщение:
                (sender as Stimulsoft.Report.Design.StiDesignerControl).Report.IsModified = false;
            }

        }
Спасибо.
ppvlad
Сообщения: 24
Зарегистрирован: 26 янв 2009, 10:35
Откуда: Moscow
Контактная информация:

Позвольте перекрыть диалог "отчёт изменён, сохранить? да-нет-отмена"

Сообщение ppvlad »

спасибо, я с этим вариантом экспериментировал, но как-то не догадался, что можно IsModified самому сбросить...

примерно такой код работает как мне надо:

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

        
        void GlobalEvents_ClosingDesigner(object sender, CancelEventArgs e)
        {
            Stimulsoft.Report.StiReport report = (sender as Stimulsoft.Report.Design.StiDesignerControl).Report;
            if ((report != null) && report.IsModified)
            {
                DialogResult res = MessageBox.Show("Save changes?", "ClosingEvent", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Asterisk);
                if (res == DialogResult.Cancel) 
                    e.Cancel = true;
                else
                {
                    if (res == DialogResult.Yes)
                    {
                        MessageBox.Show("DoSave");
                    }

                    // чтобы не появилось сообщение:
                    report.IsModified = false;
                }
            }
        }
НО! Это работает на закрытии дизайнера, тут хоть как-то опередить штатный диалог можно,
а как его подавить на этапе, когда при несохранённом текущем отчёте
пользователь пытается открыть (Open) или создать новый (New)?

там вроде как без вариантов работает StiDesignerControl.TestReportSave(),
а хотелось-бы иметь возможность и здесь подсунуть свой диалог...
Edward
Сообщения: 930
Зарегистрирован: 09 июн 2006, 12:23

Позвольте перекрыть диалог "отчёт изменён, сохранить? да-нет-отмена"

Сообщение Edward »

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

Задача ясна, будем разбираться, о результатах сообщим в этом топике.

Спасибо.
Jan
Сообщения: 495
Зарегистрирован: 19 фев 2009, 11:14

Позвольте перекрыть диалог "отчёт изменён, сохранить? да-нет-отмена"

Сообщение Jan »

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

Добавлено глобальное событие - StiOptions.Engine.GlobalEvents.SaveChangesInDialogBoxDesigner.

Проверьте билд от 9 марта.

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