Skip to main content
All docs
V24.2

DevExpress v24.2 Update — Your Feedback Matters

Our What's New in v24.2 webpage includes product-specific surveys. Your response to our survey questions will help us measure product satisfaction for features released in this major update and help us refine our plans for our next major release.

Take the survey Not interested

IDrillThroughProcessorAsync Interface

In This Article

Implements drill-through functionality in web reports and enables asynchronous operations.

Namespace: DevExpress.XtraReports.Web.WebDocumentViewer

Assembly: DevExpress.XtraReports.v24.2.Web.dll

NuGet Package: DevExpress.Web.Reporting.Common

#Declaration

public interface IDrillThroughProcessorAsync

#Remarks

To add drill-through functionality to reports in an application, create a class that implements the IDrillThroughProcessorAsync interface. The CreateReportAsync method accepts the DrillThroughContext object and returns a report for display. At application startup you should call the ReportingConfigurationBuilder.UseAsyncEngine method and register a custom service with the ServiceCollectionServiceExtensions.AddScoped<TService,TImplementation> method:

using System;
using System.Text.Json;
using System.Threading.Tasks;
using DevExpress.XtraReports.Services;
using DevExpress.XtraReports.Web.WebDocumentViewer;
// ...
public class NavigateInfo {
    public string NavigateTo { get; set; }
    public string MasterID { get; set; }
}
public class CustomDrillThroughProcessorAsync : IDrillThroughProcessorAsync {
    readonly IReportProviderAsync reportProviderAsync;

    public CustomDrillThroughProcessorAsync(IReportProviderAsync reportProviderAsync) {
        this.reportProviderAsync = reportProviderAsync;
    }
    public async Task<DrillThroughResult> CreateReportAsync(DrillThroughContext context) {
        NavigateInfo navigateInfo = JsonSerializer.Deserialize<NavigateInfo>(context.CustomData);
        var reportNameToOpen = navigateInfo.NavigateTo == "back" ? "MainReport"
            : navigateInfo.NavigateTo == "details" ? "DetailReport1" : null;
        var report = await reportProviderAsync.GetReportAsync(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);
    }
}

View Example: Web Reporting - How to create drill-through reports

See Also