Back to Devexpress

GridReportManagerService

wpf-115300-mvvm-framework-services-predefined-set-report-services-gridreportmanagerservice.md

latest9.8 KB
Original Source

GridReportManagerService

  • Apr 01, 2021
  • 4 minutes to read

GridReportManagerService is an IReportManagerService implementation that allows you to convert a GridControl into a XtraReport that you can customize, print and/or export.

Note

The GridReportManagerService works only with the TableView.

Imagine that your task is to enable the end-user to export a GridControl to a file or stream, or print it in the required format. To accomplish this task, use the GridReportManagerService which allows you to manage XtraReport objects populated with data from your GridControl.

To start using the GridReportManagerService , attach it to a TableView as shown in the code snippet below.

xaml
<dxg:GridControl ... >
    ...
    <dxg:GridControl.View>
        <dxg:TableView ... >
            <dxmvvm:Interaction.Behaviors>
                <dxrudex:GridReportManagerService x:Name="EmployeesReportService"/>
            </dxmvvm:Interaction.Behaviors>
        </dxg:TableView>
    </dxg:GridControl.View>
</dxg:GridControl>

Use one of the following approaches to manage reports of the attached service:

Example

View Example

csharp
using System.Collections.ObjectModel;
using DevExpress.Mvvm.DataAnnotations;
using DevExpress.Mvvm.POCO;

namespace ReportManagerServiceExample.ViewModels {
    [POCOViewModel]
    public class MainViewModel {
        public virtual ObservableCollection<EmployeeViewModel> Employees { get; set; }
        public MainViewModel() {
            Employees = new ObservableCollection<EmployeeViewModel>();
            Employees.Add(ViewModelSource.Create(() => new EmployeeViewModel() { Name = "Frankie West PhD", Department = "Music", EmployeeID = 0 }));
            Employees.Add(ViewModelSource.Create(() => new EmployeeViewModel() { Name = "Jett Mitchell", Department = "Music", EmployeeID = 1 }));
            Employees.Add(ViewModelSource.Create(() => new EmployeeViewModel() { Name = "Garrick Stiedemann DVM", Department = "Music", EmployeeID = 2 }));
            Employees.Add(ViewModelSource.Create(() => new EmployeeViewModel() { Name = "Hettie Runte", Department = "Music", EmployeeID = 3 }));
            Employees.Add(ViewModelSource.Create(() => new EmployeeViewModel() { Name = "Gabe Flatley", Department = "Journalism", EmployeeID = 4 }));
            Employees.Add(ViewModelSource.Create(() => new EmployeeViewModel() { Name = "Zetta Beatty", Department = "Journalism", EmployeeID = 5 }));
            Employees.Add(ViewModelSource.Create(() => new EmployeeViewModel() { Name = "Ms. Luis Jewess", Department = "Journalism", EmployeeID = 6 }));
            Employees.Add(ViewModelSource.Create(() => new EmployeeViewModel() { Name = "Jefferey Legros III", Department = "Management", EmployeeID = 7 }));
            Employees.Add(ViewModelSource.Create(() => new EmployeeViewModel() { Name = "Margaretta Roberts", Department = "Management", EmployeeID = 8 }));
        }
    }
}
xaml
<UserControl x:Class="ReportManagerServiceExample.Views.MainView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
    xmlns:dxb="http://schemas.devexpress.com/winfx/2008/xaml/bars"
    xmlns:dxr="http://schemas.devexpress.com/winfx/2008/xaml/ribbon"
    xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
    xmlns:dxrudex="http://schemas.devexpress.com/winfx/2008/xaml/reports/userdesignerextensions"
    xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm"
    xmlns:ViewModels="clr-namespace:ReportManagerServiceExample.ViewModels"
    mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"
    DataContext="{dxmvvm:ViewModelSource Type=ViewModels:MainViewModel}">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <dxr:RibbonControl Grid.Row="0" RibbonStyle="Office2010">
            <dxr:RibbonControl.ToolbarItems>
                <dxb:BarButtonItemLink BarItemName="newItem"/>
            </dxr:RibbonControl.ToolbarItems>
            <dxr:RibbonDefaultPageCategory>
                <dxr:RibbonPage Caption="Home">
                    <dxr:RibbonPageGroup>
                        <dxb:BarSplitButtonItem Content="Reports" ActAsDropDown="True" LargeGlyph="{dx:DXImage Image=Print_32x32.png}" Glyph="{dx:DXImage Image=Print_16x16.png}">
                            <dxmvvm:Interaction.Behaviors>
                                <dxrudex:ReportManagerBehavior Service="{Binding ElementName=EmployeesReportService}" />
                            </dxmvvm:Interaction.Behaviors>
                        </dxb:BarSplitButtonItem>
                    </dxr:RibbonPageGroup>
                </dxr:RibbonPage>
            </dxr:RibbonDefaultPageCategory>
        </dxr:RibbonControl>
        <dxg:GridControl Grid.Row="1" ItemsSource="{Binding Employees}" Name="grid">
            <dxg:GridControl.Columns>
                <dxg:GridColumn FieldName="EmployeeID" />
                <dxg:GridColumn FieldName="Name" />
                <dxg:GridColumn FieldName="Department"/>
            </dxg:GridControl.Columns>
            <dxg:GridControl.TotalSummary>
                <dxg:GridSummaryItem SummaryType="Count" Alignment="Right" />
            </dxg:GridControl.TotalSummary>
            <dxg:GridControl.View>
                <dxg:TableView AllowPerPixelScrolling="True" ShowFixedTotalSummary="True">
                    <dxmvvm:Interaction.Behaviors>
                        <dxrudex:GridReportManagerService x:Name="EmployeesReportService"/>
                    </dxmvvm:Interaction.Behaviors>
                </dxg:TableView>
            </dxg:GridControl.View>
        </dxg:GridControl>
    </Grid>
</UserControl>
vb
Imports System.Collections.ObjectModel
Imports DevExpress.Mvvm.DataAnnotations
Imports DevExpress.Mvvm.POCO

Namespace ReportManagerServiceExample.ViewModels
    <POCOViewModel> _
    Public Class MainViewModel
        Public Overridable Property Employees() As ObservableCollection(Of EmployeeViewModel)
        Public Sub New()
            Employees = New ObservableCollection(Of EmployeeViewModel)()
            Employees.Add(ViewModelSource.Create(Function() New EmployeeViewModel() With {.Name = "Frankie West PhD", .Department = "Music", .EmployeeID = 0}))
            Employees.Add(ViewModelSource.Create(Function() New EmployeeViewModel() With {.Name = "Jett Mitchell", .Department = "Music", .EmployeeID = 1}))
            Employees.Add(ViewModelSource.Create(Function() New EmployeeViewModel() With {.Name = "Garrick Stiedemann DVM", .Department = "Music", .EmployeeID = 2}))
            Employees.Add(ViewModelSource.Create(Function() New EmployeeViewModel() With {.Name = "Hettie Runte", .Department = "Music", .EmployeeID = 3}))
            Employees.Add(ViewModelSource.Create(Function() New EmployeeViewModel() With {.Name = "Gabe Flatley", .Department = "Journalism", .EmployeeID = 4}))
            Employees.Add(ViewModelSource.Create(Function() New EmployeeViewModel() With {.Name = "Zetta Beatty", .Department = "Journalism", .EmployeeID = 5}))
            Employees.Add(ViewModelSource.Create(Function() New EmployeeViewModel() With {.Name = "Ms. Luis Jewess", .Department = "Journalism", .EmployeeID = 6}))
            Employees.Add(ViewModelSource.Create(Function() New EmployeeViewModel() With {.Name = "Jefferey Legros III", .Department = "Management", .EmployeeID = 7}))
            Employees.Add(ViewModelSource.Create(Function() New EmployeeViewModel() With {.Name = "Margaretta Roberts", .Department = "Management", .EmployeeID = 8}))
        End Sub
    End Class
End Namespace

See Also

StandaloneReportManagerService

Generate a Grid-Based Report