0. ICommandHandler интерфейс
Вы должны обработать команду ReportCommand.NewReport
путем реализации интерфейса ICommandHandler
. Вы должны передать объект, реализующий этот интерфейс, методу XRDesignMdiController.AddCommandHandler
. Вы можете получить XRDesignMdiController
объект от ReportDesignTool.DesignForm.DesignMdiController
или от ReportDesignTool.DesignRibbonForm.DesignMdiController
Недвижимость в соответствии с типом формы, которую вы хотите использовать.
Вот пример:
Private Sub ShowReportDesigner()
Dim tool As New ReportDesignTool(CreateReport)
Dim controller = tool.DesignRibbonForm.DesignMdiController
Dim handler As New NewCommandHandler(controller, AddressOf CreateReport)
controller.AddCommandHandler(handler)
tool.ShowRibbonDesigner()
End Sub
Private Function CreateReport() As XtraReport
Dim report As New XtraReport
report.DataSource = YourDataSourceObjectHere
Return report
End Function
Public Class NewCommandHandler
Implements ICommandHandler
Private ReadOnly _controller As XRDesignMdiController
Private ReadOnly _createReport As Func(Of XtraReport)
Public Sub New(controller As XRDesignMdiController, createReport As Func(Of XtraReport))
_controller = controller
_createReport = createReport
End Sub
Public Function CanHandleCommand(command As ReportCommand, ByRef useNextHandler As Boolean) As Boolean Implements ICommandHandler.CanHandleCommand
useNextHandler = command <> ReportCommand.NewReport
Return Not useNextHandler
End Function
Public Sub HandleCommand(command As ReportCommand, args() As Object) Implements ICommandHandler.HandleCommand
_controller.OpenReport(_createReport())
End Sub
End Class
1. DesignPanelLoaded событие
Другой способ подписаться на XRDesignMdiController.DesignPanelLoaded
событие. В этом случае вы можете проверить, где DataSource
отчета на загруженной панели пуст и установить его в источник данных.
Вот пример:
Private Sub ShowReportDesigner()
Dim report As New XtraReport
report.DataSource = YourDataSourceObjectHere
Dim tool As New ReportDesignTool(New XtraReport)
Dim controller = tool.DesignRibbonForm.DesignMdiController
AddHandler controller.DesignPanelLoaded, AddressOf mdiController_DesignPanelLoaded
tool.ShowRibbonDesigner()
End Sub
Private Sub mdiController_DesignPanelLoaded(ByVal sender As Object, ByVal e As DesignerLoadedEventArgs)
Dim panel = DirectCast(sender, XRDesignPanel)
Dim report = panel.Report
If IsNothing(report.DataSource) Then
report.DataSource = YourDataSourceObjectHere
End If
End Sub
nemoBu4, первый метод отлично работает, спасибо! Но та же проблема существует - поля данных исчезают, когда я нажимаю «Новый отчет». Мои другие вопросы: каким образом я могу изменить заголовок конструктора отчетов и имя нового отчета (оба являются XtraReport). Благодаря! – Chris
@Chris Я понятия не имею, почему ваши поля данных исчезают. Можете ли вы показать свой код? Другие вопросы вы можете задать, нажав кнопку «Задать вопрос». Пожалуйста, не используйте комментарии для обсуждения новых вопросов. – nempoBu4
Выяснил это. Отмечено как ответ - еще раз спасибо. – Chris