Пользовательское сохранение шаблона
Пользовательское сохранение шаблона
Добрый день.
Задача: Реализовать пользовательское сохранение отчета из Дизайнера
Реализовано: Используется свойство "StiOptions.Designer.DontAskSaveReport = true;" и подписка на событие "StiOptions.Engine.GlobalEvents.SavingReportInDesigner"
Проблема: Нужно уметь отличать в обработчике сохранения
1) безусловный Save (вызов по нажатию пользователем кнопки/иконки "Сохранить")
2) Save при Close (вызов при нажатии на "Закрыть" в дизайнере)
Пример: отчет был изменен пользователем и пользователь нажимает "закрыть". В этом случае нужно спросить "Сохранить или нет отчет", чтобы была возможность отменить изменения.
Теперь допустим пользователь нажимает "Save" и с учетом того, что обработчик используется один, будет задан вопрос "Сохранить отчет или нет", хотя подразумевается безусловное сохранение и вопроса задавать не нужно.
Как мне решить эту коллизию при сохранении? Можете предложить логику работы?
Задача: Реализовать пользовательское сохранение отчета из Дизайнера
Реализовано: Используется свойство "StiOptions.Designer.DontAskSaveReport = true;" и подписка на событие "StiOptions.Engine.GlobalEvents.SavingReportInDesigner"
Проблема: Нужно уметь отличать в обработчике сохранения
1) безусловный Save (вызов по нажатию пользователем кнопки/иконки "Сохранить")
2) Save при Close (вызов при нажатии на "Закрыть" в дизайнере)
Пример: отчет был изменен пользователем и пользователь нажимает "закрыть". В этом случае нужно спросить "Сохранить или нет отчет", чтобы была возможность отменить изменения.
Теперь допустим пользователь нажимает "Save" и с учетом того, что обработчик используется один, будет задан вопрос "Сохранить отчет или нет", хотя подразумевается безусловное сохранение и вопроса задавать не нужно.
Как мне решить эту коллизию при сохранении? Можете предложить логику работы?
- Вложения
-
- TestStimulsoftReport.zip
- Пример проекта
- (23.62 КБ) 191 скачивание
Stimulsoft 2014.1.1900.0 Winforms / Windows 7 / Visual Studio 2012 UP4
Re: Пользовательское сохранение шаблона
Здравствуйте,
На форму добавляем StiRibbonDesignerControl или StiDesignerControl, подписываемся на закрытие формы, сохраняем отчет.
Скорректированный проект в приложении.
Спасибо.
На форму добавляем StiRibbonDesignerControl или StiDesignerControl, подписываемся на закрытие формы, сохраняем отчет.
Скорректированный проект в приложении.
Спасибо.
- Вложения
-
- TestStimulsoftReport.zip
- (24.14 КБ) 196 скачиваний
Re: Пользовательское сохранение шаблона
В предложенной Вами реализации:
1. В обработчике OnLoad() отключается подписка на глобальное событие, и как следствие, обработка по нажатию "Save"
2. Если же включить обработчик по нажатию "Save" (закомментировать строчку [3]), то обработчик "GlobalEventsSavingReportInDesigner" вызывается все равно раньше, чем "Form1_FormClosing". Получается такая последовательность:
[1] Click пользователя на закрытии формы или "Alt+F4"
[2] Вызов обработчика GlobalEventsSavingReportInDesigner
[3] Вызов обработчика Form1_FormClosing
или такая
[1] Click пользователя на "Save" в дизайнере
[2] Вызов обработчика GlobalEventsSavingReportInDesigner
Т.о. опять возвращаемся к началу, как узнать на шаге [2] это вызов "Save" или следующий вызов будет "Form1_FormClosing" а значит "Close"
Взгляд с другой стороны:
Может есть событие "OnSaveClick" у компонента RibbonControl или DesignerControl на которое можно подписаться, тогда вопрос бы решился
1. В обработчике OnLoad() отключается подписка на глобальное событие, и как следствие, обработка по нажатию "Save"
Код: Выделить всё
[1] StiOptions.Engine.GlobalEvents.SavingReportInDesigner += GlobalEventsSavingReportInDesigner;
[2] stiRibbonDesignerControl1.Report = report;
[3] StiOptions.Engine.GlobalEvents.SavingReportInDesigner -= GlobalEventsSavingReportInDesigner; <------------- "Не будет вызываться обработчик "Save"
[1] Click пользователя на закрытии формы или "Alt+F4"
[2] Вызов обработчика GlobalEventsSavingReportInDesigner
[3] Вызов обработчика Form1_FormClosing
или такая
[1] Click пользователя на "Save" в дизайнере
[2] Вызов обработчика GlobalEventsSavingReportInDesigner
Т.о. опять возвращаемся к началу, как узнать на шаге [2] это вызов "Save" или следующий вызов будет "Form1_FormClosing" а значит "Close"
Взгляд с другой стороны:
Может есть событие "OnSaveClick" у компонента RibbonControl или DesignerControl на которое можно подписаться, тогда вопрос бы решился
Stimulsoft 2014.1.1900.0 Winforms / Windows 7 / Visual Studio 2012 UP4
Re: Пользовательское сохранение шаблона
Здравствуйте,
Пожалуйста, уточните какую версию вы используете.
При удалении строки [3] - по кнопке Save вызывается GlobalEventsSavingReportInDesigner, при закрытии формы только Form1_FormClosing.
Спасибо.
Пожалуйста, уточните какую версию вы используете.
При удалении строки [3] - по кнопке Save вызывается GlobalEventsSavingReportInDesigner, при закрытии формы только Form1_FormClosing.
Спасибо.
Re: Пользовательское сохранение шаблона
1) Версия: 2014.1.1810.0
2) По кнопке "Save" вызывается GlobalEventsSavingReportInDesigner, а при нажатии "Закрыть" 2 варианта поведения
а) если отчет не модифицирован - вызывается Form1_FormClosing.
b) если отчет модифицирован - сначала GlobalEventsSavingReportInDesigner, потом Form1_FormClosing
2) По кнопке "Save" вызывается GlobalEventsSavingReportInDesigner, а при нажатии "Закрыть" 2 варианта поведения
а) если отчет не модифицирован - вызывается Form1_FormClosing.
b) если отчет модифицирован - сначала GlobalEventsSavingReportInDesigner, потом Form1_FormClosing
Stimulsoft 2014.1.1900.0 Winforms / Windows 7 / Visual Studio 2012 UP4
Re: Пользовательское сохранение шаблона
Здравствуйте,
Если убрать следующую строку и ваш вопрос о сохранении:
StiOptions.Designer.DontAskSaveReport = true;
и подписаться на сохранение отчета, то при нажатии на кнопку Save будет происходить безусловное сохранение, а при закрытии формы будет задаваться вопрос сохранить отчет или нет.
Спасибо.
Немного запутались с вашей задачей. По логике, то что вы хотите реализовано в самом дизайнере по умолчанию, и вы зачем то это отключаете и пытаетесь сами это "прикрутить"..Пример: отчет был изменен пользователем и пользователь нажимает "закрыть". В этом случае нужно спросить "Сохранить или нет отчет", чтобы была возможность отменить изменения.
Теперь допустим пользователь нажимает "Save" и с учетом того, что обработчик используется один, будет задан вопрос "Сохранить отчет или нет", хотя подразумевается безусловное сохранение и вопроса задавать не нужно.
Если убрать следующую строку и ваш вопрос о сохранении:
StiOptions.Designer.DontAskSaveReport = true;
и подписаться на сохранение отчета, то при нажатии на кнопку Save будет происходить безусловное сохранение, а при закрытии формы будет задаваться вопрос сохранить отчет или нет.
Спасибо.
Re: Пользовательское сохранение шаблона
Да. Это решение то, что нужно. Осталось только выяснить: как отключать лишние пункты меню. Для этого вопроса создал отдельную тему http://forumru.stimulsoft.com/viewtopic.php?f=8&t=3610
Спасибо
Спасибо
Stimulsoft 2014.1.1900.0 Winforms / Windows 7 / Visual Studio 2012 UP4
Re: Пользовательское сохранение шаблона
Здравствуйте,
Спасибо за ответ. Вопрос по пунктам меню ответим в той теме.
Спасибо за ответ. Вопрос по пунктам меню ответим в той теме.
Re: Пользовательское сохранение шаблона
Здравствуйте,
Добавили опцию:
stiRibbonDesignerControl.ShowCaption = false;
Будет доступно в следующем билде на этой неделе.
Добавили опцию:
stiRibbonDesignerControl.ShowCaption = false;
Будет доступно в следующем билде на этой неделе.
Re: Пользовательское сохранение шаблона
Опять вернулся к этой задаче. Теперь попробуйте:Aleksey писал(а):Здравствуйте,
Если убрать следующую строку и ваш вопрос о сохранении:
StiOptions.Designer.DontAskSaveReport = true;
и подписаться на сохранение отчета, то при нажатии на кнопку Save будет происходить безусловное сохранение, а при закрытии формы будет задаваться вопрос сохранить отчет или нет.
Спасибо.
1. Открыть шаблон
2. Изменить шаблон
3. Нажать закрыть окно
Будет вызван метод "Save" ДО метода "Close". Т.о. получается:
1. нет никакой возможности отличить "безусловное сохранение" от закрытия (условное). Save всегда вызывается раньше Closing если шаблон изменен
2. нет возможности предложить отмену закрытия формы пользователю, т.к. вызовется Save, после которого почему то благополучно сбрасывается IsModify. и в Close приходим с чистым IsModify. Вот получается сидеть гадать. Откуда пришел вызов, то ли сразу после нажатия на закрыть и шаблон неизменен (IsModify = false) или после Save
Я бы и рад не придумывать, но вызов Save перед Close рубит все планыи вы зачем то это отключаете и пытаетесь сами это "прикрутить"..
Если убрать следующую строку и ваш вопрос о сохранении:
Если бы в StiSavingObjectEventArgs параметр EventSource был равен "Close" при закрытии формы, а не "Save" (что вообще-то не логично, т.к. Save вызова не было), то. все решилось бы гладко и хватило бы встроенных средств редактора
Stimulsoft 2014.1.1900.0 Winforms / Windows 7 / Visual Studio 2012 UP4