Back to Devexpress

Create Data Extract

dashboard-115910-winforms-dashboard-winforms-designer-create-dashboards-in-the-winforms-designer-providing-data-extract-data-source-creating-data-extracts.md

latest12.3 KB
Original Source

Create Data Extract

  • Sep 24, 2025
  • 6 minutes to read

A data extract is a compressed snapshot of data obtained from the existing data source.

Note

Data Extract does not support the OLAP Data Source.

Create a Data Extract with the Data Source Wizard

To create a new data extract from the existing data source, perform the following steps.

  1. Click the New Data Source button in the Data Source ribbon tab.

  2. On the first page of the invoked Data Source Wizard dialog, specify whether you want to use an existing data connection or create a new data connection.

  3. On the next page, select Data extract and click Next.

  4. On the first page of the invoked Data Source Wizard dialog, specify whether you want to use an existing data connection or create a new data connection.

  5. On the next page, select whether to create a new data extract or load data from the extract data file.

  6. (Conditional) The next page appears if you create the data extract from the Entity Framework Data Source or Object Data Source. The page allows you to select the fields to store in the data file.

  7. On the next page, you can specify the filter applied to data. Review the Filter Data via the Filter Editor article for more information.

  8. (Conditional) The next page appears if the original data source contains parameters ( the parameterized SQL filter query with dashboard parameters).

  9. On the final page, specify a path to the file that contains the resulting data extract.

Create a Data Extract in Code

Create the DashboardExtractDataSource class instance and specify the following:

Note

Note that the data member should be specified only for the SQL or Entity Framework data sources.

Finally, add the created DashboardExtractDataSource object to the Dashboard.DataSources collection.

Example

This example demonstrates how to create the Extract Data Source, replace existing dashboard data sources with Extract Data Sources and update the Extract data file.

The DashboardViewer loads a dashboard. The dashboard is initially bound to the Microsoft SQL Server database file (.mdf) with the DashboardSqlDataSource.

The CreateExtractAndSave method creates the DashboardExtractDataSource based on the original data source, adds the newly created data source to the dashboard, iterates over dashboard items to change the data source settings, and finally saves the modified dashboard and the Extract data file.

The UpdateExtract method calls the DashboardExtractDataSource.UpdateExtractFile() method for each Extract Data Source in the dashboard.

View Example: WinForms - Dashboard with Extract Data Source

csharp
using DevExpress.DashboardCommon;
using DevExpress.DashboardWin;
using System.IO;
using System.Linq;
using System.Windows.Forms;

namespace ExtractDataSourceExample {
    public partial class Form1 : DevExpress.XtraEditors.XtraForm {
        public Form1() {
            InitializeComponent();
            dashboardViewer1.CustomizeDashboardTitle += DashboardViewer1_CustomizeDashboardTitle;
            dashboardViewer1.LoadDashboard("DashboardTest.xml");
        }

        delegate void SafeUpdate(string file);
        private void CreateExtractAndSave() {
            DataSourceCollection dsCollection = new DataSourceCollection();
            dsCollection.AddRange(dashboardViewer1.Dashboard.DataSources.Where(d => !(d is DashboardExtractDataSource)));
            foreach (var ds in dsCollection) {
                    DashboardExtractDataSource extractDataSource = new DashboardExtractDataSource();
                    extractDataSource.ExtractSourceOptions.DataSource = ds;

                    if (ds is DashboardSqlDataSource)
                        extractDataSource.ExtractSourceOptions.DataMember = ((DashboardSqlDataSource)(ds)).Queries[0].Name;

                    extractDataSource.FileName = Path.GetFullPath($"Extract_{ds.Name}.dat");
                    extractDataSource.UpdateExtractFile();
                    foreach (DataDashboardItem item in dashboardViewer1.Dashboard.Items)
                        if (item.DataSource == ds)
                            item.DataSource = extractDataSource;
            }
            dashboardViewer1.Dashboard.DataSources.RemoveRange(dsCollection);
            dashboardViewer1.Dashboard.SaveToXml("Dashboard_Extract.xml");
        }

        private void UpdateExtract() {
            dashboardViewer1.ReloadData();
            foreach (var ds in dashboardViewer1.Dashboard.DataSources.Where(d => d is DashboardExtractDataSource)) {
                ((DashboardExtractDataSource)ds).UpdateExtractFile();
            }
        }

        private async void UpdateExtractAsync() {
            await dashboardViewer1.UpdateExtractDataSourcesAsync(
                (fileName, result) => { 
                    OnDataReady(fileName); 
                },
                (fileName, result) => { 
                    MessageBox.Show($"File {fileName} updated "); 
                });
        }

        void OnDataReady(string fileName) {
            dashboardViewer1.Invoke(new SafeUpdate(UpdateViewer), new object[] { fileName });
        }
        void UpdateViewer(string fileName) {
            MessageBox.Show($"Data for the file {fileName} is ready ");
            dashboardViewer1.ReloadData();
        }

        private void DashboardViewer1_CustomizeDashboardTitle(object sender, CustomizeDashboardTitleEventArgs e) {
            DashboardToolbarItem itemUpdate = new DashboardToolbarItem((args) => UpdateExtract()) {
                Caption = "Update Extract Data Source",
            };
            e.Items.Add(itemUpdate);

            DashboardToolbarItem itemUpdateAsync = new DashboardToolbarItem((args) => UpdateExtractAsync()) {
                Caption = "Async Update Extract Data Sources",
            };
            e.Items.Add(itemUpdateAsync);

            DashboardToolbarItem itemSave = new DashboardToolbarItem((args) => CreateExtractAndSave()) {
                Caption = "Create Extract Data Source",
            };
            e.Items.Insert(0,itemSave);
        }
    }
}
vb
Imports DevExpress.DashboardCommon
Imports DevExpress.DashboardWin
Imports System.IO
Imports System.Linq
Imports System.Windows.Forms

Namespace ExtractDataSourceExample
    Partial Public Class Form1
        Inherits DevExpress.XtraEditors.XtraForm

        Public Sub New()
            InitializeComponent()
            AddHandler dashboardViewer1.CustomizeDashboardTitle, AddressOf DashboardViewer1_CustomizeDashboardTitle
            dashboardViewer1.LoadDashboard("DashboardTest.xml")
        End Sub

        Private Delegate Sub SafeUpdate(ByVal file As String)
        Private Sub CreateExtractAndSave()
            Dim dsCollection As New DataSourceCollection()
            dsCollection.AddRange(dashboardViewer1.Dashboard.DataSources.Where(Function(d) Not (TypeOf d Is DashboardExtractDataSource)))
            For Each ds In dsCollection
                Dim extractDataSource As New DashboardExtractDataSource()
                extractDataSource.ExtractSourceOptions.DataSource = ds

                If TypeOf ds Is DashboardSqlDataSource Then
                    extractDataSource.ExtractSourceOptions.DataMember = DirectCast(ds, DashboardSqlDataSource).Queries(0).Name
                End If

                extractDataSource.FileName = Path.GetFullPath($"Extract_{ds.Name}.dat")
                extractDataSource.UpdateExtractFile()
                For Each item As DataDashboardItem In dashboardViewer1.Dashboard.Items
                    If item.DataSource Is ds Then
                        item.DataSource = extractDataSource
                    End If
                Next item
            Next ds
            dashboardViewer1.Dashboard.DataSources.RemoveRange(dsCollection)
            dashboardViewer1.Dashboard.SaveToXml("Dashboard_Extract.xml")
        End Sub

        Private Sub UpdateExtract()
            dashboardViewer1.ReloadData()
            For Each ds In dashboardViewer1.Dashboard.DataSources.Where(Function(d) TypeOf d Is DashboardExtractDataSource)
                CType(ds, DashboardExtractDataSource).UpdateExtractFile()
            Next ds
        End Sub

        Private Sub UpdateExtractAsync()
            dashboardViewer1.UpdateExtractDataSourcesAsync(
                Sub(fileName, result)
                    OnDataReady(fileName)
                End Sub,
                Sub(fileName, result)
                    MessageBox.Show($"File {fileName} updated ")
                End Sub)
        End Sub

        Private Sub OnDataReady(ByVal fileName As String)
            dashboardViewer1.Invoke(New SafeUpdate(AddressOf UpdateViewer), New Object() {fileName})
        End Sub
        Private Sub UpdateViewer(ByVal fileName As String)
            MessageBox.Show($"Data for the file {fileName} is ready ")
            dashboardViewer1.ReloadData()
        End Sub

        Private Sub DashboardViewer1_CustomizeDashboardTitle(ByVal sender As Object, ByVal e As CustomizeDashboardTitleEventArgs)
            Dim itemUpdate As New DashboardToolbarItem(Sub(args) UpdateExtract()) With {.Caption = "Update Extract Data Source"}
            e.Items.Add(itemUpdate)

            Dim itemUpdateAsync As New DashboardToolbarItem(Sub(args) UpdateExtractAsync()) With {.Caption = "Async Update Extract Data Sources"}
            e.Items.Add(itemUpdateAsync)

            Dim itemSave As New DashboardToolbarItem(Sub(args) CreateExtractAndSave()) With {.Caption = "Create Extract Data Source"}
            e.Items.Insert(0,itemSave)
        End Sub
    End Class
End Namespace