Подписание на событие StiOptions.WCFService.WCFOpeningReport
Добавлено: 23 янв 2015, 16:29
Здравствуйте.
У нас в приложении можно открывать несколько форм с построителем отчета. Это контрол StiWpfDesignerControl. Т.е. может быть открыто несколько форм с данным контролом.
Рендеринг отчета делается на WCF сервисе. Поэтому подписываемся на события WCF
вот так: StiOptions.WCFService.WCFOpeningReportInDesigner += WCFOpeningReportInDesigner;
на каждой форме. Сколько открытых форм, столько и подписей на события.
При закрытии формы, от события отписываемся:
StiOptions.WCFService.WCFOpeningReportInDesigner -= WCFOpeningReportInDesigner;
При нажатии кнопки "Открыть отчет" вызывается
WCFOpeningReportInDesigner(object sender, Stimulsoft.Report.Events.StiWCFOpeningReportEventArgs e)
Cобытие вызывается для каждой открытой формы c StiWpfDesignerControl, несмотря на то, что кнопка нажата один раз. Но тут все понятно - сколько подписываний, столько и вызовов процедур.
Я свою форму пытаюсь отследить в процедуре WCFOpeningReportInDesigner по переменной sender.
Примерно так: if (!Equals(sender, Designer)) return;
Где Designer это построитель отчета на текущей, конкретной форме. Наверное такая логика правильная, но тут возникают проблемы - переменная sender для события WCFOpeningReportInDesigner всегда null.
Для остальных событий sender всегда возвращает контрол сгенерировавший данное событие (StiWpfDesignerControl). Как например для события WCFRenderReport.
А вот для события WCFOpeningReportInDesigner всегда sender == null.
Что я делаю не так? Мне необходимо отследить на какой форме нажата кнопка "Открыть отчет". Или может быть есть возможно подписать на данное событие конкретный экземпляр StiWpfDesignerControl, а не глобальный объект StiOptions.WCFService?
p.s.
Быстренько пробежался по вашим исходникам. В файле StiActions.cs есть такая строка:
reportOpenResult = StiOptions.WCFService.InvokeWCFOpeningReportInDesigner();
Может быть в процедуру InvokeWCFOpeningReportInDesigner имело бы смысл передавать переменную designer?
Ну и там дальше по цепочке передавать в событие переменную designer.
У нас в приложении можно открывать несколько форм с построителем отчета. Это контрол StiWpfDesignerControl. Т.е. может быть открыто несколько форм с данным контролом.
Рендеринг отчета делается на WCF сервисе. Поэтому подписываемся на события WCF
вот так: StiOptions.WCFService.WCFOpeningReportInDesigner += WCFOpeningReportInDesigner;
на каждой форме. Сколько открытых форм, столько и подписей на события.
При закрытии формы, от события отписываемся:
StiOptions.WCFService.WCFOpeningReportInDesigner -= WCFOpeningReportInDesigner;
При нажатии кнопки "Открыть отчет" вызывается
WCFOpeningReportInDesigner(object sender, Stimulsoft.Report.Events.StiWCFOpeningReportEventArgs e)
Cобытие вызывается для каждой открытой формы c StiWpfDesignerControl, несмотря на то, что кнопка нажата один раз. Но тут все понятно - сколько подписываний, столько и вызовов процедур.
Я свою форму пытаюсь отследить в процедуре WCFOpeningReportInDesigner по переменной sender.
Примерно так: if (!Equals(sender, Designer)) return;
Где Designer это построитель отчета на текущей, конкретной форме. Наверное такая логика правильная, но тут возникают проблемы - переменная sender для события WCFOpeningReportInDesigner всегда null.
Для остальных событий sender всегда возвращает контрол сгенерировавший данное событие (StiWpfDesignerControl). Как например для события WCFRenderReport.
А вот для события WCFOpeningReportInDesigner всегда sender == null.
Что я делаю не так? Мне необходимо отследить на какой форме нажата кнопка "Открыть отчет". Или может быть есть возможно подписать на данное событие конкретный экземпляр StiWpfDesignerControl, а не глобальный объект StiOptions.WCFService?
p.s.
Быстренько пробежался по вашим исходникам. В файле StiActions.cs есть такая строка:
reportOpenResult = StiOptions.WCFService.InvokeWCFOpeningReportInDesigner();
Может быть в процедуру InvokeWCFOpeningReportInDesigner имело бы смысл передавать переменную designer?
Ну и там дальше по цепочке передавать в событие переменную designer.