-
Notifications
You must be signed in to change notification settings - Fork 3
/
ObjectDataSourceInjector.cs
31 lines (27 loc) · 1.15 KB
/
ObjectDataSourceInjector.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.ComponentModel.Design;
using DevExpress.DataAccess.ObjectBinding;
using DevExpress.XtraPrinting.Native;
using DevExpress.XtraReports;
using DevExpress.XtraReports.Native.Data;
using DevExpress.XtraReports.Services;
using DevExpress.XtraReports.UI;
using Microsoft.Extensions.DependencyInjection;
namespace xrefcoredemo.Services {
public interface IObjectDataSourceInjector {
public void Process(XtraReport report);
}
class ObjectDataSourceInjector : IObjectDataSourceInjector {
IServiceProvider ServiceProvider { get; }
public ObjectDataSourceInjector(IServiceProvider serviceProvider) {
ServiceProvider = serviceProvider ?? throw new ArgumentNullException(nameof(serviceProvider));
}
public void Process(XtraReport report) {
foreach (var ods in DataSourceManager.GetDataSources<ObjectDataSource>(report, includeSubReports: true)) {
if (ods.DataSource is Type dataSourceType) {
ods.DataSource = ServiceProvider.GetRequiredService(dataSourceType);
}
}
}
}
}