xtrareports-devexpress-dot-xtrareports-dot-web-dot-webdocumentviewer-1f1f57fe.md
Implements drill-through functionality in web reports.
Namespace : DevExpress.XtraReports.Web.WebDocumentViewer
Assembly : DevExpress.XtraReports.v25.2.Web.dll
NuGet Package : DevExpress.Web.Reporting.Common
public interface IDrillThroughProcessor
Public Interface IDrillThroughProcessor
To add drill-through functionality to reports in an application, create a class that implements the IDrillThroughProcessor interface. Its CreateReport method accepts the DrillThroughContext object and returns a report for display. Call the ServiceCollectionServiceExtensions.AddScoped<TService,TImplementation> method to register a custom drill-through processor at application startup.
using System;
using System.Text.Json;
using DevExpress.XtraReports.Services;
using DevExpress.XtraReports.Web.WebDocumentViewer;
// ...
public class NavigateInfo {
public string NavigateTo { get; set; }
public string MasterID { get; set; }
}
public class CustomDrillThroughProcessor : IDrillThroughProcessor {
readonly IReportProvider reportProvider;
public CustomDrillThroughProcessor(IReportProvider reportProvider) {
this.reportProvider = reportProvider;
}
public DrillThroughResult CreateReport(DrillThroughContext context) {
NavigateInfo navigateInfo = JsonSerializer.Deserialize<NavigateInfo>(context.CustomData);
var reportNameToOpen = navigateInfo.NavigateTo == "back" ? "MainReport"
: navigateInfo.NavigateTo == "details" ? "DetailReport1" : null;
var report = reportProvider.GetReport(reportNameToOpen, null) ?? context.Report;
if(navigateInfo.NavigateTo == "details") {
int catID = 0;
Int32.TryParse(navigateInfo.MasterID, out catID);
report.Parameters["categoryID"].Value = catID;
}
return new DrillThroughResult(report);
}
}
using Microsoft.Extensions.DependencyInjection;
using DevExpress.XtraReports.Web.WebDocumentViewer;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDevExpressControls();
builder.Services.AddScoped<IDrillThroughProcessor, CustomDrillThroughProcessor>();
var app = builder.Build();
See Also