【问题标题】:Bind DataSource to new DevExpress Report Designer?将 DataSource 绑定到新的 DevExpress 报表设计器?
【发布时间】:2015-04-16 19:33:19
【问题描述】:

我试图弄清楚当用户在 DevExpress 用户数据报告设计器中单击 New Report 或任何新报告时,如何将我的 DataSource 设置为默认值。

现在,我在Form_Load 上加载的空白报告与我的DataSources 一样正常,但只要我点击New Report,它们就会消失。

我搜索并关注了文档,但它们似乎都适合打开特定报告(如上)。

谁能帮忙?

【问题讨论】:

    标签: vb.net devexpress devexpress-windows-ui


    【解决方案1】:

    0。 ICommandHandler 接口

    您需要通过实现ICommandHandler 接口来处理ReportCommand.NewReport 命令。您必须将实现此接口的对象传递给XRDesignMdiController.AddCommandHandler 方法。您可以根据要使用的表单类型从ReportDesignTool.DesignForm.DesignMdiController 属性或ReportDesignTool.DesignRibbonForm.DesignMdiController 属性中获取XRDesignMdiController 对象。
    这是一个例子:

    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 我不知道为什么您的数据字段会消失。你能显示你的代码吗?您可以使用 «Ask question» 按钮提出其他问题。请不要使用 cmets 提出新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    相关资源
    最近更新 更多