Back to Devexpress

GridDocumentExportOptions.CustomizeCell Property

blazor-devexpress-dot-blazor-dot-griddocumentexportoptions.md

latest8.7 KB
Original Source

GridDocumentExportOptions.CustomizeCell Property

Allows you to customize table cells in the exported file.

Namespace : DevExpress.Blazor

Assembly : DevExpress.Blazor.v25.2.dll

NuGet Package : DevExpress.Blazor

Declaration

csharp
public Action<GridDocumentExportCustomizeCellEventArgs> CustomizeCell { get; set; }

Property Value

TypeDescription
Action<GridDocumentExportCustomizeCellEventArgs>

A delegate method that customizes table cells.

|

Property Paths

You can access this nested property as listed below:

Object TypePath to CustomizeCell
GridExportEventArgs

.DocumentOptions .CustomizeCell

|

Remarks

When exporting Grid data to PDF, handle the CustomizeCell event to perform the following actions:

Set the Handled property to true to apply specified settings. Otherwise, the processed cell is exported with default settings.

The AreaType event argument identifies the area containing the processed cell. You can use other event arguments to obtain additional information about the processed cell. Each argument corresponds to an individual area-dependent cell attribute. If the processed cell does not have a specific attribute, the corresponding argument returns null. The following table lists cell attributes available for different area types:

HeaderGroup HeaderData AreaGroup FooterTotal Footer
ColumnFieldName
DataItem
GroupFieldName
SummaryItems
Value

The following example exports Grid data to PDF and customizes the output table appearance:

@rendermode InteractiveServer
@using DevExpress.Drawing;
@inject WeatherForecastService ForecastService

<DxGrid @ref="Grid" Data="@forecasts" ShowGroupPanel="true">
    <Columns>
        <DxGridDataColumn Caption="Date" FieldName="Date" />
        <DxGridDataColumn Caption="Temperature (C)" FieldName="TemperatureC" ExportWidth="300"/>
        <DxGridDataColumn Caption="Temperature (F)" FieldName="TemperatureF" ExportWidth="300" />
        <DxGridDataColumn Caption="Summary" FieldName="Summary" GroupIndex="0" />
    </Columns>
    <TotalSummary>
        <DxGridSummaryItem SummaryType="GridSummaryItemType.Count" FieldName="Date" />
        <DxGridSummaryItem SummaryType="GridSummaryItemType.Min" FieldName="TemperatureC" />
        <DxGridSummaryItem SummaryType="GridSummaryItemType.Max" FieldName="TemperatureC" />
    </TotalSummary>
    <ToolbarTemplate>
        <DxToolbar>
            <DxToolbarItem Text="Export to PDF" Click="ExportPdf_Click" BeginGroup="true" />
        </DxToolbar>
    </ToolbarTemplate>
</DxGrid>

@code {
    IGrid Grid;
    private WeatherForecast[]? forecasts;
    protected override async Task OnInitializedAsync() {
        forecasts = await ForecastService.GetForecastAsync(DateOnly.FromDateTime(DateTime.Now));
    }
    async Task ExportPdf_Click() {
        await Grid.ExportToPdfAsync("ExportResult", new GridPdfExportOptions() {
            CustomizeCell = OnCustomizeCell,
        });
    }
    void OnCustomizeCell(GridDocumentExportCustomizeCellEventArgs args) {
        if (args.AreaType == DocumentExportAreaType.Header){
            args.ElementStyle.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
            args.ElementStyle.Font = new DXFont("Arial", 10, DXFontStyle.Bold);
        }
        if (args.AreaType == DocumentExportAreaType.GroupHeader && args.GroupFieldName == "Summary")
            args.Text = args.Value + ":";
        if (args.AreaType == DocumentExportAreaType.DataArea) {
            args.ElementStyle.BackColor = System.Drawing.Color.MintCream;
            if (args.ColumnFieldName.Contains("Temperature")) {
                var forecast = (WeatherForecast)args.DataItem;
                if (forecast.TemperatureC < 0)
                    args.ElementStyle.ForeColor = System.Drawing.Color.Blue;
                if (forecast.TemperatureC > 30)
                    args.ElementStyle.ForeColor = System.Drawing.Color.Red;
            }
        }
        if (args.AreaType == DocumentExportAreaType.TotalFooter && args.ColumnFieldName == "TemperatureC") {
            args.Text = args.SummaryItems[0].Text + "°C\n" + args.SummaryItems[1].Text + "°C";
            args.ElementStyle.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
        }
        args.Handled = true;
    }
}
csharp
using System;

public class WeatherForecast {
    public DateTime Date { get; set; }
    public int TemperatureC { get; set; }
    public string Forecast { get; set; }
    public string CloudCover { get; set; }
}
csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;

public class WeatherForecastService {
    private List<WeatherForecast> Forecast { get; set; }

    private static string[] CloudCover = new[] {
        "Sunny", "Partly cloudy", "Cloudy", "Storm"
    };

    Tuple<int, string>[] ConditionsForForecast = new Tuple<int, string>[] {
        Tuple.Create( 22 , "Hot"),
        Tuple.Create( 13 , "Warm"),
        Tuple.Create( 0 , "Cold"),
        Tuple.Create( -10 , "Freezing")
    };

    public WeatherForecastService() {
        Forecast = CreateForecast();
    }

    private List<WeatherForecast> CreateForecast() {
        var rng = new Random();
        DateTime startDate = DateTime.Now;
        return Enumerable.Range(1, 30).Select(index => {
            var temperatureC = rng.Next(-10, 30);
            return new WeatherForecast {
                Date = startDate.AddDays(index),
                TemperatureC = temperatureC,
                CloudCover = CloudCover[rng.Next(0, 4)],
                Forecast = ConditionsForForecast.First(c => c.Item1 <= temperatureC).Item2
            };
        }).ToList();
    }

    public List<WeatherForecast> GetForecast() {
        return Forecast;
    }

    public Task<WeatherForecast[]> GetForecastAsync(CancellationToken ct = default) {
        return Task.FromResult(Forecast.ToArray());
    }
}
csharp
// ...
builder.Services.AddSingleton<WeatherForecastService>();

Refer to the following topic for additional information: Export Blazor Grid Data to PDF.

See Also

GridDocumentExportOptions Class

GridDocumentExportOptions Members

DevExpress.Blazor Namespace