xtrareports-114911-feature-guide-to-devexpress-reports-bind-reports-to-data-excel-file-bind-a-report-to-an-excel-workbook-runtime-sample.md
View Example: Reporting for WinForms - Bind a Report to an Excel Workbook at Runtime
This example demonstrates how to bind a report to a Microsoft Excel workbook and specify the report layout at runtime.
Do the following to bind a report to an Excel file:
Create the ExcelDataSource class’s instance and specify the full path to the source Excel file using the ExcelDataSource.FileName property.
Create the ExcelSourceOptions class’s instance to specify the required options for extracting data from the workbook.
The report engine automatically generates a data source schema by default. Do the following to manually define the data source schema if you need to customize the data fields’ display names and types:
Assign the created data source to the report’s XtraReportBase.DataSource property.
Use the XRControl.ExpressionBindings property to provide data to the report.
using DevExpress.DataAccess.Excel;
using DevExpress.XtraReports.UI;
using DevExpress.XtraReports.Configuration;
// ...
// Create an empty report.
XtraReport report = new XtraReport();
// Create a new Excel data source.
ExcelDataSource excelDataSource = new ExcelDataSource();
excelDataSource.FileName = "..//..//Northwind.xlsx";
// Select a required worksheet.
ExcelWorksheetSettings excelWorksheetSettings = new ExcelWorksheetSettings();
excelWorksheetSettings.WorksheetName = "Sheet_Categories";
// Specify import settings.
ExcelSourceOptions excelSourceOptions = new ExcelSourceOptions();
excelSourceOptions.ImportSettings = excelWorksheetSettings;
excelSourceOptions.SkipHiddenRows = false;
excelSourceOptions.SkipHiddenColumns = false;
excelDataSource.SourceOptions = excelSourceOptions;
// Create new fields and specify their settings.
FieldInfo fieldCategoryID = new FieldInfo { Name = "CategoryID", Type = typeof(double), Selected = false };
FieldInfo fieldCategoryName = new FieldInfo { Name = "CategoryName", Type = typeof(string) };
FieldInfo fieldDescription = new FieldInfo { Name = "Description", Type = typeof(string) };
// Add the created fields to the data source schema in the order that matches the column order in the source file.
excelDataSource.Schema.AddRange(new FieldInfo[] { fieldCategoryID, fieldCategoryName, fieldDescription });
// Assign the data source to the report.
report.DataSource = excelDataSource;
// Add a detail band to the report.
DetailBand detailBand = new DetailBand();
detailBand.Height = 50;
report.Bands.Add(detailBand);
// Create a new label.
XRLabel label = new XRLabel();
// Specify the label's binding depending on the data binding mode.
if (Settings.Default.UserDesignerOptions.DataBindingMode == DataBindingMode.Bindings)
label.DataBindings.Add("Text", null, "CategoryName");
else label.ExpressionBindings.Add(new ExpressionBinding("BeforePrint", "Text", "[CategoryName]"));
// Add the label to the detail band.
detailBand.Controls.Add(label);
// Show the report's print preview.
report.ShowPreview();
Imports DevExpress.DataAccess.Excel
Imports DevExpress.XtraReports.UI
Imports DevExpress.XtraReports.Configuration
' ...
' Create an empty report.
Dim report As XtraReport = New XtraReport()
' Create a new Excel data source.
Dim excelDataSource As ExcelDataSource = New ExcelDataSource()
excelDataSource.FileName = "..//..//Northwind.xlsx"
' Select a required worksheet.
Dim excelWorksheetSettings As ExcelWorksheetSettings = New ExcelWorksheetSettings()
excelWorksheetSettings.WorksheetName = "Sheet_Categories"
' Specify import settings.
Dim excelSourceOptions As ExcelSourceOptions = New ExcelSourceOptions()
excelSourceOptions.ImportSettings = excelWorksheetSettings
excelSourceOptions.SkipHiddenRows = False
excelSourceOptions.SkipHiddenColumns = False
excelDataSource.SourceOptions = excelSourceOptions
' Create new fields and specify their settings.
Dim fieldCategoryID As FieldInfo = New FieldInfo With {.Name = "CategoryID", .Type = GetType(Double), .Selected = False}
Dim fieldCategoryName As FieldInfo = New FieldInfo With {.Name = "CategoryName", .Type = GetType(String)}
Dim fieldDescription As FieldInfo = New FieldInfo With {.Name = "Description", .Type = GetType(String)}
' Add the created fields to the data source schema in the order that matches the column order in the source file.
excelDataSource.Schema.AddRange(New FieldInfo() {fieldCategoryID, fieldCategoryName, fieldDescription})
' Assign the data source to the report.
report.DataSource = excelDataSource
' Add a detail band to the report.
Dim detailBand As DetailBand = New DetailBand()
detailBand.Height = 50
report.Bands.Add(detailBand)
' Create a new label.
Dim label As XRLabel = New XRLabel()
' Specify the label's binding depending on the data binding mode.
If Settings.Default.UserDesignerOptions.DataBindingMode = DataBindingMode.Bindings Then
label.DataBindings.Add("Text", Nothing, "CategoryName")
Else
label.ExpressionBindings.Add(New ExpressionBinding("BeforePrint", "Text", "[CategoryName]"))
End If
' Add the label to the detail band.
detailBand.Controls.Add(label)
' Show the report's print preview.
report.ShowPreview()
See Also