2015-04-16 4 views
0

Я пытаюсь выяснить, как установить мой DataSource по умолчанию, когда пользователь нажимает Новый отчет или любой новый отчет в DevExpress User Data Report Designer.Связать DataSource с новым дизайнером отчетов DevExpress?

Прямо сейчас, пустой отчет у меня есть нагрузка на есть мой DataSources просто отлично, но в любое время я ударил Новый отчет, они ушли.

Я googled и следовал за документами, но все они, похоже, направлены на открытие конкретного отчета (как указано выше).

Может ли кто-нибудь помочь?

ответ

1

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 
+0

nemoBu4, первый метод отлично работает, спасибо! Но та же проблема существует - поля данных исчезают, когда я нажимаю «Новый отчет». Мои другие вопросы: каким образом я могу изменить заголовок конструктора отчетов и имя нового отчета (оба являются XtraReport). Благодаря! – Chris

+0

@Chris Я понятия не имею, почему ваши поля данных исчезают. Можете ли вы показать свой код? Другие вопросы вы можете задать, нажав кнопку «Задать вопрос». Пожалуйста, не используйте комментарии для обсуждения новых вопросов. – nempoBu4

+0

Выяснил это. Отмечено как ответ - еще раз спасибо. – Chris