# Bold Reports Support

## Documentation

# How to add a new item to the Report Viewer toolbar?

The below section explains how to add a new item to the Report Viewer’s toolbar.

You can add custom items to the toolbar using the `customItems` property in `toolbarSettings`, and this property will be triggered while initializing the toolbar rendering in Report Viewer.

You can provide functionality for the custom item or override an existing functionality using the `toolBarItemClick`.

### Add a new item to an existing toolbar group

To add a new custom item to an existing Report Viewer toolbar group, you need to set the `customItems` property in `toolbarSettings` and provide a `JSON` array of collection input with the `groupIndex`, `index`, `itemType`, `cssClass` name, and `tooltip` properties as given in the following code snippet.

    $(function () {
            $("#viewer").boldReportViewer({
                reportServiceUrl: "https://demos.boldreports.com/services/api/ReportViewer",
                reportPath: '~/Resources/docs/sales-order-detail.rdl',
                toolbarSettings: {
                    showToolbar: true,
                    items: ej.ReportViewer.ToolbarItems.All & ~ej.ReportViewer.ToolbarItems.Print,
                    customGroups: [{
                        items: [{
                            type: 'Default',
                            cssClass: "e-icon e-mail e-reportviewer-icon CustomGroup",
                            id: 'CustomGroup',
                            tooltip: { header: 'CustomGroup', content: 'toolbargroups'}
                        },
                        {
                            type: 'Default',
                            cssClass: "e-icon e-mail e-reportviewer-icon subCustomGroup",
                            id: 'subCustomGroup',
                            tooltip: { header: 'subCustomGroup', content: 'subtoolbargroups'}
                        }],
                        groupIndex: 3
                    }]
                },
                toolBarItemClick: ontoolBarItemClick
            });
        });
    
    //Toolbar click event handler
    function ontoolBarItemClick(args) {
        if (args.value === "CustomGroup") {
            //Implement the code to CustomGroup toolbar option
            alert("CustomGroup toolbar option clicked");
        }
        if (args.value === "subCustomGroup") {
            //Implement the code to subCustomGroup toolbar option
            alert("SubCustomGroup toolbar option clicked");
        }
    }

# How to customize the parameter block items?

The following section explains how to customize the parameter block items using properties.

### Change the Report Parameter drop-down height and width

To change the parameter drop-down height and width in the parameter panel, you need to specify the `popupHeight` and `popupWidth` properties in `parameterSettings` as shown in the below code snippet.

    <script>
        $("#viewer").boldReportViewer({
            parameterSettings: {
                popupHeight: "200px",
                popupWidth: "150px",
            }
        });
    </script>

### Hide parameter block scroller

To hide the `scrollbar` in the parameter panel, you need to specify the `enableparameterblockscroller` property in `parameterSettings` as shown in the below code snippet.

    <script>
        $("#viewer").boldReportViewer({
            parameterSettings: {
                 enableParameterBlockScroller: false
            }
        });
    </script>

### Show or Hide the Parameter block

To show or hide the parameter block, you need to specify the `hideParameterBlock` property in `parameterSettings` as shown in the below code snippet.

    <script>
        $("#viewer").boldReportViewer({
            parameterSettings: {
                 hideParameterBlock: true
            }
        });
    </script>

### Change the Parameter Item Width and Label Width

To change the parameter item width and label width, you need to specify the `itemWidth` and `labelWidth` properties in `parameterSettings` as shown in the below code snippet.

    <script>
        $("#viewer").boldReportViewer({
            parameterSettings: {
                 itemWidth: '250px',
                labelWidth: 'auto'
            }
        });
    </script>

# How to customize the save and open button in the Bold Reports Report Designer?

This articles explains to customize the save and open buttons in the Report Designer application. We can able to achieve this in two ways one is **Hiding the existing button and add the new buttons** another one is **Overriding the actions when clicking the inbuilt button**.

### Hiding the existing button and add the new buttons

1. Hide the save and open button using the **toolbarSettings** event in our Report Designer.

    **ASP.NET Core**

    In ASP.NET Core Report Designer application, you can hide the save and open button using **ViewBag** option as shown in the following code example.

        <bold-report-designer id="reportdesigner1"
                                create="controlInitialized"
                                service-url="../Home"
                                report-data-extensions="@ViewBag.ReportDataExtensions"
                                toolbar-settings="@ViewBag.toolbarSettings"
                                report-opened="reportOpened"
                                ajax-before-load="ajaxBeforeLoad"
                                report-saved="reportSaved"
                                toolbar-click="toolbarClick"
                                report-modified="reportModified">
          </bold-report-designer>

        public IActionResult Index()
              {
                  ViewBag.toolbarSettings = new BoldReports.Models.ReportDesigner.ToolbarSettings();
                  ViewBag.toolbarSettings.Items = BoldReports.ReportDesignerEnums.ToolbarItems.All
                                                      & ~BoldReports.ReportDesignerEnums.ToolbarItems.Save
                                                      & ~BoldReports.ReportDesignerEnums.ToolbarItems.Open;
                  return View();
              }
2. Add a customized button and use your override codes to save and open the report to your custom location.

    **ASP.NET Core**

        <button id="Open" type="button" value="Open">Open</button>
            <button id="Save" type="button" value="Save" >Save</button>
        <div style="height: 600px;width: 100%;">
            <bold-report-designer id="reportdesigner1"
                                  create="controlInitialized"
                                  service-url="../Home"
                                  report-data-extensions="@ViewBag.ReportDataExtensions"
                                  toolbar-settings="@ViewBag.toolbarSettings"
                                  report-opened="reportOpened"
                                  ajax-before-load="ajaxBeforeLoad"
                                  report-saved="reportSaved"
                                  toolbar-click="toolbarClick"
                                  report-modified="reportModified">
            </bold-report-designer>
        </div>
        <script>
            $("#Open").click(function (e) {
                var designer = $('#reportdesigner1').data('boldReportDesigner');
                designer.openReport("/" + catagory + "/" + reportName);
            });
        
            $("#Save").click(function (e) {
                var designer = $('#reportdesigner1').data('boldReportDesigner');
                if (!designer.isNewServerReport()) {
                    // It is invokes the existing report save call.
                    designer.saveReport();
                } else {
                    // It is invokes the SaveAs report call.
                    designer.saveReport("reportName");
                }
            });

### Overriding the actions when clicking the inbuilt button

Override the Save and Open button using the **SaveReportClick** and **OpenReportClick** event as shown in the following code example.

    <div style="height: 600px;width: 100%;">
        <bold-report-designer id="reportdesigner1"
                              create="controlInitialized"
                              service-url="../Home"
                              report-data-extensions="@ViewBag.ReportDataExtensions"
                              save-report-click="saveMenuClick"
                              open-report-click="openMenuClick"
                              report-opened="reportOpened"
                              ajax-before-load="ajaxBeforeLoad"
                              report-saved="reportSaved"
                              toolbar-click="toolbarClick"
                              report-modified="reportModified">
        </bold-report-designer>
    </div>
    <script>
        switch (args.select) {
            case 'Device':
             // It is invokes when opening the report from device.
                this.browseFromClient();
                args.cancel = true;
                break;
            case 'Server':
            // It is invokes when opening the report from server.
                this.browseReport(ej.ReportDesigner.BrowseType.Open);
                args.cancel = true;
                break;
            }
    
        function saveMenuClick(args) {
            switch (args.select) {
                case 'Save':
                    // It is invokes the existing report save call.
                    saveReport();
                    args.cancel = true;
                    break;
                case 'SaveAsDisk':
                    // It is invokes the file download.
                    downloadReport();
                    args.cancel = true;
                    break;
                case 'SaveAsServer':
                    // It is invokes the save to server call.
                    saveAsServer(catagory, reportName);
                    args.cancel = true;
                    break;
            }
        }

# How to display no data message for a data region?

This document describes how to display a message when no data exists in database or no row found for user selection in RDL report. It is always a good practice to show proper message when there is no data for user selection. To show proper message, you can set the custom message in `No Rows` property. No Rows is an option on a matrix, table, chart, sub-report, etc., that displays alternate text when the results of your query display no results.

### To set the NoRowsMessage property for a table, matrix, list, or subreport

Select the table, matrix, or list data region or subreport on the design surface. The `Properties` panel displays the properties for the selected item.

In the Properties panel, under `No Rows` category set the text that you want to display as a message in `Message` property field.

![no-data-for-table.png](https://support.boldreports.com/kb/attachment/article/655/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQxMzEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.DneOOqrODJyhvxMJIGsdOv9BcU-RFfhPiGDQUx4uOcE)

Alternatively, you can set the message text based on dynamic values, by using the `Expressions`. Refer [Set Expression](https://help.boldreports.com/enterprise-reporting/designer-guide/report-designer/compose-report/properties-panel/#set-expression) and [Reset Expression](https://help.boldreports.com/enterprise-reporting/designer-guide/report-designer/compose-report/properties-panel/#reset-expression) section to open set/reset expression menu in properties panel.

![message-as-expression-in-table.png](https://support.boldreports.com/kb/attachment/article/655/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQxMzIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.oXzmqdfMfxgLXM5Q9PDl7MAzQipWekYCeAyrWMg7iVg)

During report preview the specified message will be displayed, if user specified value is not available in the database.![no-data-for-table-preview.png](https://support.boldreports.com/kb/attachment/article/655/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQxMzMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.p7FdfhNMNoH8vmsKMqV8qLoJCrh5s9itR4oVmLXgthk)

### To set the NoDataMessage property for a chart

Select the chart on the design surface. The `Properties` panel displays the properties for the selected item.

In the Properties panel, under `No Data` category set the text that you want to display as a message in `Message` property field.

![no-data-for-chart.png](https://support.boldreports.com/kb/attachment/article/655/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQxMzQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.bXs0_9eqafqQ5v6Dzmtpd4JBZP2qrRaGeFLzZCjSKjo)

Alternatively, you can set the message text based on dynamic values, by using the `Expressions`. Refer [Set Expression](https://help.boldreports.com/enterprise-reporting/designer-guide/report-designer/compose-report/properties-panel/#set-expression) and [Reset Expression](https://help.boldreports.com/enterprise-reporting/designer-guide/report-designer/compose-report/properties-panel/#reset-expression) section to open set/reset expression menu in properties panel.

![message-as-expression-in-chart.png](https://support.boldreports.com/kb/attachment/article/655/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQxMzYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.PQSVDPjRDW4KELhAIdiTrCExDh1quN_xBuinxtCrIiQ)

During report preview the specified message will be displayed, if user specified value is not available in the database.

![no-data-for-chart-preview.png](https://support.boldreports.com/kb/attachment/article/655/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQxMzgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.q7frAFPonbE2XofZbkl49PLxFjvRVKBRb_9r8sMqCuc)

# How to have the save alone with report designer?

1. Hide the save button from the designer using the `toolbarSettings`.
2. Use the `toolbarRendering` and `toolbarClick` event to use our custom save button along with save option.

You can refer the following code snippet.

    <div id="container"></div>
    <script>
        $("#container").boldReportDesigner({
            toolbarSettings: { items: ej.ReportDesigner.ToolbarItems.All & ~ej.ReportDesigner.ToolbarItems.Save },
              toolbarClick: function(args) {
                if ($(args.target).hasClass('e-rptdesigner-toolbarcontainer')) {
                var saveButton = ej.buildTag('li.e-rptdesigner-toolbarli e-designer-toolbar-align e-tooltxt', '', {}, {});
                var saveIcon = ej.buildTag('span.e-rptdesigner-toolbar-icon e-toolbarfonticonbasic e-rptdesigner-toolbar-save e-li-item', '', {}, { title: 'Save' });
                args.target.find('ul:first').append(saveButton.append(saveIcon));
            }
            },
             toolbarRendering: function(args) {
               if (args.click === 'Save') {
                var designer = $('#designer').data('boldReportDesigner');
                args.cancel = true;
                designer.saveReport();
            }
            }
        });
    </script>

# How to show alert for users to save the changes before closing the designer?

Use `hasReportChanges` to know the unsaved changes from the designer and `window``beforeunload` event needs to be used for showing the alert along with unsaved changes in validation. You can find the following code sample.

    <script type="text/javascript">
    
        var isFormSubmit = true;
        $(document).ready(function () {
            $(document.body).bind('submit', $.proxy(winformSubmit, this));
            $(window).bind('beforeunload', $.proxy(beforeWindowUnload, this));
        });
    
        function winformSubmit(args) {
            isFormSubmit = false;
        }
    
        function beforeWindowUnload(args) {
    
            if (isFormSubmit) {
                var designer = $('#designer').data('boldReportDesigner');
                if (designer.hasReportChanges()) {
                    return 'Changes you made may not be saved';
                }
            }
            isFormSubmit = true;
        }
    </script>

# How to show or hide the Report Viewer toolbar options?

The following section explains how to customize the Report Viewer toolbar and show or hide toolbar items.

### Show or Hide toolbar items

To show or hide specific toolbar items, you need to set the `toolbarSettings` property. The following example code snippet shows how to hide the parameter option from the toolbar.

    $("#viewer").boldReportViewer({
        toolbarSettings: {
            items: ej.ReportViewer.ToolbarItems.All & ~ej.ReportViewer.ToolbarItems.Parameters
        }
    });

Similarly, you can show or hide all other toolbar options with the help of `toolbarSettings.items` enum.

### Hide Toolbar

To hide the entire Report Viewer toolbar, you need to set the `showToolbar` property to false as shown in the below code snippet.

    $("#viewer").boldReportViewer({
        toolbarSettings: {
            showToolbar: false
        }
    });

### Show or Hide specific export options

You can show or hide specific export types in the Report Viewer toolbar using the `exportOptions` property. The following example code shows how to hide the `HTML` export type from the default export options.

    $("#viewer").boldReportViewer({
        exportSettings: {
            exportOptions:ej.ReportViewer.ExportOptions.All & ~ej.ReportViewer.ExportOptions.Html
        }
    });

# How to change the data source dynamically

You have to use the `reportOption.ReportModel.DataSourceCredentials` available with the `OnInitReportOptions` method to dynamically change the data source in the web API controller. The following code sample shows how to change the connection string of the `AdventureWorks` data source in the report.

        [NonAction]
        public void OnInitReportOptions(ReportViewerOptions reportOption)
        {
            DataSourceCredentials dataSourceCredentials = new DataSourceCredentials();
    
            string connectionString = "Data Source = dataplatformdemodata.syncfusion.com; Initial Catalog = AdventureWorks; User ID = 'demoreadonly@data-platform-demo'; Password = 'N@c)=Y8s*1&dh'";
    
            //You have to provide the shared data source name used with the report or the data source name available with the report.
            dataSourceCredentials.Name = "AdventureWorks";
            dataSourceCredentials.ConnectionString = connectionString;
            reportOption.ReportModel.DataSourceCredentials = new List<DataSourceCredentials> { dataSourceCredentials };
        }

​You can find the following help documentation for how to change data sources based on the application parameters in various platforms.

- [Angular](https://help.boldreports.com/embedded-reporting/angular-reporting/report-viewer/handle-post-actions/#pass-custom-data-in-ajax-request)
- [React](https://help.boldreports.com/embedded-reporting/react-reporting/report-viewer/handle-post-actions/#pass-custom-data-in-ajax-request)
- [Javascript](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/handle-post-actions/#pass-custom-data-in-ajax-request)
- [ASP.NET Core](https://help.boldreports.com/embedded-reporting/aspnet-core-reporting/report-viewer/handle-post-actions/#pass-custom-data-in-ajax-request)
- [ASP.NET MVC](https://help.boldreports.com/embedded-reporting/aspnet-mvc-reporting/report-viewer/handle-post-actions/#pass-custom-data-in-ajax-request)
- [ASP.NET Webforms](https://help.boldreports.com/embedded-reporting/aspnet-web-forms-reporting/report-viewer/handle-post-actions/#pass-custom-data-in-ajax-request)

# Get the user from database and pass the user as parameter for filtering the data from database

<font color="#1f2328" face="-apple-system, BlinkMacSystemFont, Segoe UI, Noto Sans, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji"><p style=" margin-top: 0px; margin-bottom: 1rem; line-height: 28px; color: rgb(40, 58, 95); font-family: Caros, sans-serif; font-size: 16px; font-style: normal; font-weight: 400; text-align: start; text-indent: 0px; white-space: normal; background-color: rgb(255, 255, 255);" class="pasteContent_RTE">Find the following steps to get the user from database and pass the user as parameter for filtering the data from database.</p><ol style=" padding-left: 2rem; margin-top: 0px; margin-bottom: 1rem; color: rgb(40, 58, 95); font-family: Caros, sans-serif; font-size: 16px; font-style: normal; font-weight: 400; text-align: start; text-indent: 0px; white-space: normal; background-color: rgb(255, 255, 255);" class="pasteContent_RTE"><li><p style=" margin-top: 0px; margin-bottom: 1rem; line-height: 28px;">Create a dataset with getting the user id from database as shown in the following image.<span> </span><img src="https://support.boldreports.com/kb/attachment/article/662/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzNjUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.sPzmOCL82CMnZCbFXF6XAiuNJEexdjcpRVvE8ob5GDY" class="e-rte-image e-imginline e-img-focus" alt="user-id-dataset.png" width="auto" height="auto" style="min-width: 0px; max-width: 769px; min-height: 0px;" data-name="user-id-dataset.png" data-size="36 KB" loading="lazy"> </p></li><li><p style=" margin-top: 0px; margin-bottom: 1rem; line-height: 28px;">Pass the user id field value from dataset to parameter available value as shown in the following image.<span> <img src="https://support.boldreports.com/kb/attachment/article/662/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzNjYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.oc-_b6MV2lBrDa0hC-F-4rRELQqHCFvC3tkPdDR5H1Q" class="e-rte-image e-imginline e-img-focus" alt="user-id-parameter.png" width="auto" height="auto" style="min-width: 0px; max-width: 769px; min-height: 0px;" data-name="user-id-parameter.png" data-size="66 KB" loading="lazy"> </span></p></li><li><p style=" margin-top: 0px; margin-bottom: 1rem; line-height: 28px;">Create a new dataset with filtering the data based on the parameter as shown in the following image.<span> <img src="https://support.boldreports.com/kb/attachment/article/662/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzNjciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.PnFACCi5rvvRdhe0j9ac9OSzekLrW-4ZkuN8hFUvSdc" class="e-rte-image e-imginline e-img-focus" alt="user-id-filter.png" width="auto" height="auto" style="min-width: 0px; max-width: 769px; min-height: 0px;" data-name="user-id-filter.png" data-size="41 KB" loading="lazy"> </span></p></li></ol></font>

# How nested object JSON data source is processed in Report Designer

The nested object json datasource will be converted into flatten data format while connecting to the datasource. The steps involved in creating sample nested object data source and its processing details are provided as follows.

1. Open the data source panel, click `New Data` and select the JSON datasource. ![select-json.png](https://support.boldreports.com/kb/attachment/article/672/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzNjgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Pa4QthnEA0L4ZeQJcHp6B-1C98RC5um9wpEd9t41JvI)
2. Choose the inline JSON type.    
![json-inline-type.png](https://support.boldreports.com/kb/attachment/article/672/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0NTAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.WctBg9Kdr7slFnTGhzI3-BSmaEMnoTFjdTn8_E5jrOE)   
You can choose the JSON type as per your requirement.
3. Now, add the inline JSON data with nested object, which needs to be placed in the inline text box.

        {   "employees":
         [{
                 "name":"John",
                 "email":"John@gmail.com",
                 "age":32,
                 "address": [{ "address" : "1/45 Western Street, berlin, Germany" }, { "address" : "1/45 Western Street, cologne, Germany" }]
        },
        {
                 "name":"Smith",
                 "email":"Smith@yahoo.com",
                 "age":21,
                 "address": [{ "address" : "14/45 Western Street, berlin, Germany" }, { "address" : "14/45 Western Street, cologne, Germany" }]
        
        },
        {
                 "name":"Chard",
                 "email":"Chard@yahoo.com",
                 "age":21,
                 "address": [{ "address" : "14/45 Western Street, berlin, Germany" }, { "address" : "14/45 Western Street, cologne, Germany" }]
        
        },
        {
                 "name":"kristen",
                 "email":"kristen@yahoo.com",
                 "age":21,
                 "address": [{ "address" : "14/45 Western Street, berlin, Germany" }, { "address" : "14/45 Western Street, cologne, Germany" }]
        
        }]
        }

    ![inline-json-data.png](https://support.boldreports.com/kb/attachment/article/672/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0NTEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.9Bh8qu7fyOR-C5xiyzX6U_dxO4ISGnhoOJOZvQBg6-I)   
In the previous sample JSON data, each employee has two address in hierarchical level, which will be converted into flatten data format while connecting to the data source.
4. Click `Connect`.
5. Query Designer will be opened, in which you need to add the dataset to the report.
6. Click `Run` to see the JSON data converted into flatten data format. ![query-designer-dataset.png](https://support.boldreports.com/kb/attachment/article/672/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzNzUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.qRWoHhAuR2zjztaojIPkxadziDQZ0d4a3mLDM6VEUZs)In the above JSON data each employee has two address in hierarchical level, which is converted into flatten data format.
7. Click `Finish` to successfully add dataset to the report.
8. Add a table and assign the necessary values. ![add-tablix.png](https://support.boldreports.com/kb/attachment/article/672/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzNzYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.G9HszNirQDZeh_MRH0uCJvsjaDhOOXp_EMToWMzcu9o) If you need to perform grouping to the data in the table, then you can refer to this [Add Grouping and Totals](https://help.boldreports.com/standalone-report-designer/designer-guide/report-items/tablix/add-grouping-and-totals-in-tablix-design/) section.
9. Now, the report preview can be visualized as follows. ![preview-report.png](https://support.boldreports.com/kb/attachment/article/672/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzNzciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.9-iT37ZJmaPDkU5Gd0L-m8_22r3ADtYCwXciFJtzkPA)

    The previous report is grouped based on name of the employee.

# How to bind business object data collection in a report?

The section explains how to bind business object data collection to a report through the client and server side for RDLC reports.

### Bind data source at client side

1. Set the RDLC report path to the `reportPath` property.
2. Assign the `processingMode` property to Local.
3. Bind the JSON array collection to the dataSources property as shown in the following code.

    <script type="text/javascript">
            $(function () {
                $("#viewer").boldReportViewer({
                    reportServiceUrl: "/api/ReportViewer",
                    processingMode: ej.ReportViewer.ProcessingMode.Local,
                    reportPath: '~/Resources/docs/product-list.rdlc',
                    dataSources: [{
                        value: [
                        {
                            ProductName: "Baked Chicken and Cheese", OrderId: "323B60", Price: 55, Category: "Non-Veg", Ingredients: "Grilled chicken, Corn and Olives.", ProductImage: ""
                        },
                        {
                            ProductName: "Chicken Delite", OrderId: "323B61", Price: 100, Category: "Non-Veg", Ingredients: "Cheese, Chicken chunks, Onions & Pineapple chunks.", ProductImage: ""
                        },
                        {
                            ProductName: "Chicken Tikka", OrderId: "323B62", Price: 64, Category: "Non-Veg", Ingredients: "Onions, Grilled chicken, Chicken salami & Tomatoes.", ProductImage: ""
                        }],
                        name: "list"
                    }]
                });
            });
    </script>

### Bind data source at server side (Web API Controller)

- You need to create a class and methods that return business object data collection, as shown in the following example.

    public class ProductList
    {
        public string ProductName { get; set; }
        public string OrderId { get; set; }
        public double Price { get; set; }
        public string Category { get; set; }
        public string Ingredients { get; set; }
        public string ProductImage { get; set; }
    
        public static IList GetData()
        {
            List<ProductList> datas = new List<ProductList>();
            ProductList data = null;
            data = new ProductList()
            {
                ProductName = "Baked Chicken and Cheese",
                OrderId = "323B60",
                Price = 55,
                Category = "Non-Veg",
                Ingredients = "grilled chicken, corn and olives.",
                ProductImage = ""
            };
            datas.Add(data);
            data = new ProductList()
            {
                ProductName = "Chicken Delite",
                OrderId = "323B61",
                Price = 100,
                Category = "Non-Veg",
                Ingredients = "cheese, chicken chunks, onions & pineapple chunks.",
                ProductImage = ""
            };
            datas.Add(data);
            data = new ProductList()
            {
                ProductName = "Chicken Tikka",
                OrderId = "323B62",
                Price = 64,
                Category = "Non-Veg",
                Ingredients = "onions, grilled chicken, chicken salami & tomatoes.",
                ProductImage = ""
            };
            datas.Add(data);
    
            return datas;
        }
    }

- You need to bind the business object data values collection to the Report Viewer using the `DataSources` property in the following code snippet.

    public void OnInitReportOptions(ReportViewerOptions reportOption)
    {
    reportOption.ReportModel.ProcessingMode = ProcessingMode.Local;
    reportOption.ReportModel.DataSources.Add(new BoldReports.Web.ReportDataSource { Name = "list", Value = ProductList.GetData() });
    }

﻿﻿﻿﻿Here, the `Name` is case sensitive and it should be the same as in the data source name in the report definition. The `Value` accepts `IList`, `DataSet`, and `DataTable` inputs.

# How to get a dataset name in Web API Service

You can get a dataset name in Web API Service when using the **\*ReportHelper** class in our Bold Reports Report Viewer component. You can refer the below code snippet for how to get Dataset name at controller side in ASP.NET and ASP.NET Core.

### ASP.NET

Store the **jsonResult** in local property and use that property in **ReportHelper.GetDataSetNames**. The following code sample demonstrates to get the dataset name in the `OnReportLoaded` method.

        private Dictionary<string, object> _jsonResult;
    
        //Post action for processing the rdl/rdlc report
        public object PostReportAction(Dictionary<string, object> jsonResult)
        {
            if (jsonResult != null && jsonResult.Keys.Count > 0)
            {
                _jsonResult = jsonResult;
            }
    
            return ReportHelper.ProcessReport(jsonResult, this);
        }
    
        public object GetResource(string key, string resourcetype, bool isPrint)
        {
            return ReportHelper.GetResource(key, resourcetype, isPrint);
        }
    
        //Method will be called when initialize the report options before start processing the report
        [NonAction]
        public void OnInitReportOptions(ReportViewerOptions reportOption)
        {
    
        }
    
        //Method will be called when reported is loaded
        [NonAction]
        public void OnReportLoaded(ReportViewerOptions reportOption)
        {
            var datasetName = ReportHelper.GetDataSetNames(_jsonResult, this);
        }

### ASP.NET Core

Store the **jsonResult** in local property and use that property in **ReportHelper.GetDataSetNames**. The following code sample demonstrates to get the dataset name in the `OnReportLoaded` method.

        private Dictionary<string, object> _jsonResult;
    
        //Post action for processing the rdl/rdlc report
        public object PostReportAction([FromBody]Dictionary<string, object> jsonResult)
        {
            if (jsonResult != null && jsonResult.Keys.Count > 0)
            {
                _jsonResult = jsonResult;
            }
    
            return ReportHelper.ProcessReport(jsonResult, this);
        }
    
        public object GetResource(string key, string resourcetype, bool isPrint)
        {
            return ReportHelper.GetResource(key, resourcetype, isPrint);
        }
    
        //Method will be called when initialize the report options before start processing the report
        [NonAction]
        public void OnInitReportOptions(ReportViewerOptions reportOption)
        {
    
        }
    
        //Method will be called when reported is loaded
        [NonAction]
        public void OnReportLoaded(ReportViewerOptions reportOption)
        {
            var datasetName = ReportHelper.GetDataSetNames(_jsonResult, this, _cache);
        }

# How to manage the reports with database using Bold Reports Report Designer

You can use **ExternalServer** to manage the reports within SQL server database. Find the following code for accessing the existing reports, datasources and datasets from SQL server ExternalServer database.

    public override List<CatalogItem> GetItems(string folderName, ItemTypeEnum type)
            {
                List<CatalogItem> _items = new List<CatalogItem>();
                string targetFolder = HttpContext.Current.Server.MapPath("~/") + @"App_Data\ReportServer\";
    
                if (type == ItemTypeEnum.Folder || type == ItemTypeEnum.Report)
                {
                    targetFolder = targetFolder + @"Report\";
                    if (!(string.IsNullOrEmpty(folderName) || folderName.Trim() == "/"))
                    {
                        targetFolder = targetFolder + folderName;
                    }
                }
    
                if (type == ItemTypeEnum.DataSet)
                {
                    foreach (var file in Directory.GetFiles(targetFolder + "DataSet"))
                    {
                        CatalogItem catalogItem = new CatalogItem();
                        catalogItem.Name = Path.GetFileNameWithoutExtension(file);
                        catalogItem.Type = ItemTypeEnum.DataSet;
                        catalogItem.Id = Regex.Replace(catalogItem.Name, @"[^0-9a-zA-Z]+", "_");
                        _items.Add(catalogItem);
                    }
                }
                else if (type == ItemTypeEnum.DataSource)
                {
                    foreach (var file in Directory.GetFiles(targetFolder + "DataSource"))
                    {
                        CatalogItem catalogItem = new CatalogItem();
                        catalogItem.Name = Path.GetFileNameWithoutExtension(file);
                        catalogItem.Type = ItemTypeEnum.DataSource;
                        catalogItem.Id = Regex.Replace(catalogItem.Name, @"[^0-9a-zA-Z]+", "_");
                        _items.Add(catalogItem);
                    }
                }
                else if (type == ItemTypeEnum.Folder)
                {
                    foreach (var file in Directory.GetDirectories(targetFolder))
                    {
                        CatalogItem catalogItem = new CatalogItem();
                        catalogItem.Name = Path.GetFileNameWithoutExtension(file);
                        catalogItem.Type = ItemTypeEnum.Folder;
                        catalogItem.Id = Regex.Replace(catalogItem.Name, @"[^0-9a-zA-Z]+", "_");
                        _items.Add(catalogItem);
                    }
                }
                else if (type == ItemTypeEnum.Report)
                {
                    foreach (var file in Directory.GetFiles(targetFolder, "*.rdl"))
                    {
                        CatalogItem catalogItem = new CatalogItem();
                        catalogItem.Name = Path.GetFileNameWithoutExtension(file);
                        catalogItem.Type = ItemTypeEnum.Report;
                        catalogItem.Id = Regex.Replace(catalogItem.Name, @"[^0-9a-zA-Z]+", "_");
                        _items.Add(catalogItem);
                    }
                }
    
                return _items;
            }

You can refer the below application for using the ExternalServer with SQL server [ExternalServer Sample](https://www.syncfusion.com/downloads/support/directtrac/general/ze/MVCWebReportDesigner-1002746165.zip)

Before the sample running you should update the below attached SQL query in your SQL server. [SQL Query](https://www.syncfusion.com/downloads/support/directtrac/general/ze/ExternalServer1350595985.zip)

# Is it possible to use a data table in Bold Reports

Yes, it is possible to use data table in Bold Reports. The data source can be added as a data table using `BoldReports.Web.ReportDataSource`. The steps involved in adding a sample data source using data table are provided as follows.

- Create a SQL connection and add the data source to the report in the `OnReportLoaded` function.

         public void OnReportLoaded(ReportViewerOptions reportOption)
              {
                 System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(@"Data Source=dataplatformdemodata.syncfusion.com;Initial Catalog=AdventureWorks2016;User id=demoreadonly@data-platform-demo;Password=N@c)=Y8s*1&dh;");
                 using (connection)
                 {
                   reportOption.ReportModel.DataSources.Add(new BoldReports.Web.ReportDataSource()
                   {
                     ...
                   });
                 }
              }
- While adding the data source, the dataset name used in the report must be provided along with the data table as shown in the following code sample.

        public void OnReportLoaded(ReportViewerOptions reportOption)
        {
          System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(@"Data Source=dataplatformdemodata.syncfusion.com;Initial Catalog=AdventureWorks2016;User id=demoreadonly@data-platform-demo;Password=N@c)=Y8s*1&dh;");
          using (connection)
          {
            reportOption.ReportModel.DataSources.Add(new BoldReports.Web.ReportDataSource()
            {
              Name = "DataSet1",
              Value = this.GetDataTable(connection)
            });
          }
        }
        
        public System.Data.DataTable GetDataTable(System.Data.SqlClient.SqlConnection connection)
        {
          System.Data.DataSet dataset = new System.Data.DataSet();
        
          System.Data.SqlClient.SqlDataAdapter adapter = new System.Data.SqlClient.SqlDataAdapter();
        
          adapter.SelectCommand = new System.Data.SqlClient.SqlCommand(
               @"SELECT top 10 [HumanResources].[Department].[DepartmentID],[HumanResources].[Department].[Name], [HumanResources].[Department].[GroupName],[HumanResources].[Department].[ModifiedDate] FROM[HumanResources].[Department]",
               connection);
          adapter.Fill(dataset);
          return dataset.Tables[0];
        }

Here the `Name` is case-sensitive and it should be same as in the dataset name in the report definition. The `Value` also accepts IList and DataSet inputs.

# How to embed BoldReports Server reports in a web application?

Bold Report Server provides a built-in Web API service that helps you to easily embed the reports into your web application. To embed the reports, you need to set the `serviceAuthorizationToken`, `reportPath`, and `reportServiceUrl`.

Based on your Report Server type, you can follow one of the procedures below.

### Enterprise Reporting - Report Server

- You need to generate a token with your user credentials and assign it to `serviceAuthorizationToken`. You can refer to the documentation [here](https://help.boldreports.com/enterprise-reporting/developer-guide/how-to/generate-access-token-for-bold-reports-server-using-api/) to generate the token using credentials.
- You need to set the Bold Report Server built-in service URL to the `reportServiceUrl` property. The `reportServiceUrl` property value should be in the format of `https://<<Report server name>>/reporting/reportservice/api/Viewer`.
- You need to set the Bold Report Server built-in server URL to the `reportServerUrl` property. The `reportServerUrl` property value should be in the format of `https://<<Report server name>>/reporting/api/site/<<site name>>`.
- You need to set the path of a report in the `reportPath` property.

    <script type="text/javascript">
        $(function () {
            $("#viewer").boldReportViewer(
                {
                    reportServiceUrl: "https://on-premise-demo.boldreports.com/reporting/reportservice/api/Viewer",
                    reportServerUrl:"https://on-premise-demo.boldreports.com/reporting/api/site/site1",
                    serviceAuthorizationToken: "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Imd1ZXN0QGJvbGRyZXBvcnRzLmNvbSIsIm5hbWVpZCI6IjIiLCJ1bmlxdWVfbmFtZSI6IjNmNWJlNDdkLTA3ZjctNDU2MS04OTYzLWUzYjFlMzRlOTIwOSIsIklQIjoiMTAzLjE0MS41MS40MiIsImlzc3VlZF9kYXRlIjoiMTYzNDE0NDMzNSIsIm5iZiI6MTYzNDE0NDMzNSwiZXhw",
                    reportPath: '/Sample Reports/Company Sales'
                }
            );
        });
    </script>

### Cloud Report Server

- You need to generate a token with your user credentials and assign it to `serviceAuthorizationToken`. You can refer to the documentation here to generate the token using credentials.
- You need to set the Bold Report Server built-in service URL to the `reportServiceUrl` property. The `reportServiceUrl` property value is [`https://service.boldreports.com/api/Viewer`](https://service.boldreports.com/api/Viewer).
- You need to set the Bold Report Server built-in server URL to the `reportServerUrl` property. The `reportServerUrl` property value should be in the format of `https://<<Report server name>>/reporting/api/`.
- You need to set the path of a report in the `reportPath` property.

    <script type="text/javascript">
        $(function () {
            $("#viewer").boldReportViewer(
                {
                    reportServiceUrl: "https://service.boldreports.com/api/Viewer",
                    reportServerUrl:"https://acmecorp.boldreports.com/reporting/api"
                    serviceAuthorizationToken: "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Imd1ZXN0QGJvbGRyZXBvcnRzLmNvbSIsIm5hbWVpZCI6IjIiLCJ1bmlxdWVfbmFtZSI6IjNmNWJlNDdkLTA3ZjctNDU2MS04OTYzLWUzYjFlMzRlOTIwOSIsIklQIjoiMTAzLjE0MS41MS40MiIsImlzc3VlZF9kYXRlIjoiMTYzNDE0NDMzNSIsIm5iZiI6MTYzNDE0NDMzNSwiZXhw",
                    reportPath: '/Sample Reports/Company Sales'
                }
            );
        });
    </script>

# How to pass data source or server credentials to the server side?

This section explains how to pass data source or server credentials to the server side.

You can specify `ReportServerCredential` in the Web API Controller `OnInitReportOptions` method, as shown in the below snippet to connect to your `SSRS` server.

    public void OnInitReportOptions(ReportViewerOptions reportOption)
    {
    reportOption.ReportModel.ReportServerCredential = new System.Net.NetworkCredential("ssrs", "RDLReport1");
    }

If the report has any data source that uses credentials, you must specify the `DataSourceCredentials` in the Web API Controller `OnInitReportOptions` method as shown in the below snippet to connect data-source.

    reportOption.ReportModel.DataSourceCredentials.Add(new BoldReports.Web.DataSourceCredentials("AdventureWorks", "ssrs1", "RDLReport1"));

# How to render SSRS reports?

You need to set the `reportServerUrl` details as shown in the below code snippet to connect with the `SSRS` server.

You can find the Web Service URL from the Reporting Services Configuration Manager under the `Web Service URL` section.

You need to set the `reportPath`, and it should be in the format of `/folder name/report name`.

    <script type="text/javascript">
        $(function () {
            $("#viewer").boldReportViewer({
                reportServiceUrl: "/api/SSRSReports",
                reportPath: "/BoldReports/Territory Sales",
                reportServerUrl: "http://<servername>/Reports_SSRS"
            });
        });
    </script>

You need to set `ReportServerCredential` in the Web API Controller `OnInitReportOptions` method, as shown in the below snippet to connect `SSRS` server.

    public void OnInitReportOptions(ReportViewerOptions reportOption)
    {
    reportOption.ReportModel.ReportServerCredential = new System.Net.NetworkCredential("ssrs", "RDLReport1");
    }

If the report has any data source that uses credentials, you must specify the `DataSourceCredentials` in the Web API Controller `OnInitReportOptions` method as shown in the below snippet to connect `datasource`.

    reportOption.ReportModel.DataSourceCredentials.Add(new BoldReports.Web.DataSourceCredentials("AdventureWorks", "ssrs1", "RDLReport1"));

For more details, refer to the below help link. [https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/ssrs-report/](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/ssrs-report/)

# How to generate a PDF from the report in console app

Use **Report Writer** component to generate a PDF documentation from the report in console application. You can find the following documentation for your reference.

[Report Writer](https://www.boldreports.com/report-viewer-sdk/report-writer)

# How to avoid the extra blank pages in print and print preview

The paper size that you specify for the report in the **Report Properties** will define the pagination for the report while printing and rendering report in the print layout. The extra blank page is created when the body of your report is too wide for your page. If you want the report to appear on a single page, all the content within the report body must fit on the physical page and the body width should be lesser or equal to the following formula:

    Body Width <= Page Width - (Left Margin + Right Margin)

For physical page renders, the concept of Usable Area should be important to keep in mind. The area of the physical page that remains after the space is allocated for margins, column spacing, and page header and footer is called the usable page area. Margins are applied only when you render the report in the print layout and print reports. The following image indicates the margin and usable page area of a physical page.

![indicates-margin-and-usable-page-area.png](https://support.boldreports.com/kb/attachment/article/686/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzODQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.XFUkG9FbUojnp240aq_eYTPzCK-8-zkiss5V6FsgUW0)

The following formula is used to calculate the usable area of the report rendering:

### Horizontal usable area

    X = Page.Width - (Left Margin + Right Margin + Column Spacing)

### Vertical usable area

    Y = Page.Height - (Top Margin + Bottom Margin + Header Height + Footer Height)

Consider the report width is 21 cm, the left margin of the report is 0.5 cm, and the right margin of the report is 0.5 cm. To avoid an extra printed page in the exported PDF file, the following formula is used:

    width of body (20) + left margin (0.5) + right margin (0.5) <= report width (21)

If the width of body is 20 or lesser, it will be rendered without extra pages. When it uses greater than 20, it will add extra pages.

# How to print the report using the external button

You can print the report with external button using [`Print`](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/api-reference/methods/#print) method.

### See also

[How to hide the print button from Report viewer toolbar](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/toolbar-customization/#hide-toolbar-items)

# How to use a frame border-image for PDF exported documentation

This articles explains to use the frame border-image for PDF exported documentation using Bold Report Report Writer component with Syncfusion PDF libraries.

You can refer the [Report Writer documentation](https://help.boldreports.com/embedded-reporting/aspnet-core-reporting/report-writer/export-ssrs-rdl-report/) for getting the PDF document from Report.

You have to use **Syncfusion.Pdf** for use the frame border-image for PDF exported documentation. You can refer the following code snippet for how to use the frame border-image for PDF exported documentation.

            [HttpPost]
            public IActionResult RDLPDF()
            {
    
                // Export the RDL To PDF.
                FileStream mainReportStream = new FileStream(_hostingEnvironment.WebRootPath + @"\Reports\SampleReport.rdl", FileMode.Open, FileAccess.Read);
                BoldReports.Writer.ReportWriter writer = new BoldReports.Writer.ReportWriter();
                writer.LoadReport(mainReportStream);
                MemoryStream memoryStream = new MemoryStream();
                writer.Save(memoryStream, BoldReports.Writer.WriterFormat.PDF);
    
                // Download the generated export document to the client side.
                memoryStream.Position = 0;
                FileStreamResult fileStreamResult = new FileStreamResult(memoryStream, "application/pdf");
    
                var fileStream1 = fileStreamResult.FileStream;

                // Combine the Exported PDF and templatecombine
                PdfDocument finalDoc = new PdfDocument();
    
                FileStream fileStream2 = new FileStream(_hostingEnvironment.WebRootPath + @"\PDF\Template.pdf", FileMode.Open, FileAccess.Read);
    
                // Creates a PDF stream for merging
    
                Stream[] streams = { fileStream1, fileStream2 };
    
                // Merges the PDF Document.
    
                PdfDocumentBase.Merge(finalDoc, streams);
    
                //Save the document into the stream
    
                MemoryStream combinestream = new MemoryStream();
    
                finalDoc.Save(combinestream);
    
                combinestream.Position = 0;
    
                FileStreamResult fileStreamResult1 = new FileStreamResult(combinestream, "application/pdf");
    
                var pagenumber = fileStreamResult1.FileStream;
    
                // Add a Page number for combined PDF
                PdfLoadedDocument loadedDoc = new PdfLoadedDocument(pagenumber);
    
                // Create a new PDF document
                PdfDocument doc = new PdfDocument();
                doc.PageSettings.Margins.All = 0;
    
                //Add a page to the document
                PdfPage page = doc.Pages.Add();
    
                //Create PDF graphics for the page
                PdfGraphics graphics = page.Graphics;
    
                FileStream fileStream3 = new FileStream(_hostingEnvironment.WebRootPath + @"\f25e9269edfa67ef53e840eea0a98c30.jpg", FileMode.Open, FileAccess.Read);
    
                //Load the image from the disk
                PdfBitmap image = new PdfBitmap(fileStream3);
    
                //Draw the image
                graphics.DrawImage(image, 0, 0, page.GetClientSize().Width, page.GetClientSize().Height);
    
                //Save the document
                MemoryStream ms = new MemoryStream();
                doc.Save(ms);
    
                //Close the document
                doc.Close(true);
    
                //Load the border design PDF document
                PdfLoadedDocument loadedDocument1 = new PdfLoadedDocument(ms);
    
                //Create a new document
                PdfDocument document = new PdfDocument();
                document.PageSettings.Margins.All = 0;
    
                //Add the border design in each page of an existing PDF document
                for (int i = 0; i < loadedDoc.Pages.Count; i++)
                {
                    //Add a PDF page
                    PdfPage pdfPage = document.Pages.Add();
    
                    //Create a template from the first document
                    PdfPageBase loadedPage = loadedDocument1.Pages[0];
                    PdfTemplate template = loadedPage.CreateTemplate();
    
                    //Draw the loaded template into a new document
                    pdfPage.Graphics.DrawPdfTemplate(template, PointF.Empty, page.GetClientSize());
    
                    //Create a template from the second document
                    loadedPage = loadedDoc.Pages[i];
                    template = loadedPage.CreateTemplate();
    
                    //Draw the loaded template into a new document
                    pdfPage.Graphics.DrawPdfTemplate(template, PointF.Empty, page.GetClientSize());
                }
    
                MemoryStream pagenumberstream = new MemoryStream();
    
                document.Save(pagenumberstream);
                //Close the PDF documents
                document.Close(true);
                loadedDocument1.Close(true);
                loadedDoc.Close(true);
    
                string contentType = "application/pdf";
    
                //Define the file name
                string fileName = "Combinewithpagenumber.pdf";
    
                //Creates a FileContentResult object by using the file contents, content type, and file name
                pagenumberstream.Position = 0;
    
                return File(pagenumberstream, contentType, fileName);
    
            }

[PDF document with the frame border sample](https://www.syncfusion.com/downloads/support/directtrac/general/ze/DrawingBorderwithPDF-716231327.zip)

# How to print the report without margin

By using the `Margin` property, you can set `0` for the left, right, top, and bottom spacing of the report layout to print the report without margin.

![margin-property.png](https://support.boldreports.com/kb/attachment/article/689/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzODYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.qJ6kE44juGsUuO2LoOp8Z8uxgxRbS-AS34b-uK_uS1M)

# How to resolve the image rendering and exporting issue with ASP.NET Core Authentication middleware

You could not add the authentication for export and image rendering requests from the Report Viewer and Report Designer. So, you have to ignore the authentication for the `GetResource` and `PostFormReportAction` methods using the `[AllowAnonymous]` attribute.

Regarding security, you will not have any issues in the aspect of security by ignoring the authentication for this `GetResource` and `PostFormReportAction` requests. These requests are used to retrieve the file format content from the server and used with our control based on the framework suggestion to have better experience in usability in downloads and avoid the delay of rendering images with reports.

These requests will be used at the time of exporting and image rendering only, this cannot be used once again by others. This approach is similar to the [Amazon Simple Storage Service (Amazon S3)](https://dev.to/idrisrampurawala/share-your-aws-s3-private-content-with-others-without-making-it-public-4k59) how they are providing access to share the private files,

You can get more details of the implementation approach from these steps,

1. Before initiating a non-authentication request, we will send the authenticate request to the server to generate the export and image content.
2. The authenticated request will generate the exported with a unique server for the downloadable content and unique id will be shared with the client once the content is ready.
3. After completing the process of generation, we will get the runtime unique key generated from the client and we will do the non-authentication request post action from the client with a unique key to the content for download and image rendering.
4. Once the content revival initiated with the server, we could not make use of this URL again to get the generated content once again from the server because the files will be deleted with the server after initiating the action.

You can find the following code reference for using the `[AllowAnonymous]` attribute and sample from this [link](https://www.syncfusion.com/downloads/support/directtrac/general/ze/BasicAuthApp-249936407).

    [Authorize]
        [Route("api/[controller]/[action]/{id?}")]
        public class ReportApiController : ControllerBase, IReportController
        {
            …….
            …….
    
            [ActionName("GetResource")]
            [AcceptVerbs("GET")]
            [AllowAnonymous]
            public object GetResource(ReportResource resource)
            {
                return ReportHelper.GetResource(resource, this, _cache);
            }
    
            [HttpPost]
            [AllowAnonymous]
            public object PostFormReportAction()
            {
                return ReportHelper.ProcessReport(null, this, this._cache);
            }
    
            …….
            …….
        }

# How to resolve the image rendering and exporting issue with the ASP.NET MVC Authentication filter

You will get issue on rendering the image and exporting the report from report viewer and report designer in ASP.NET MVC application when Authentication filter has been used for your Web API. You have to ignore the Authentication validation for export and image request with condition of URL and form values.

Regarding security, you will not have any issues in the aspect of security by ignoring the authentication for this `GetResource` and `PostReportAction` requests. These requests are used to retrieve the file format content from the server and used with our control based on the framework suggestion to have better experience in usability in downloads and avoid the delay of rendering images with reports.

These requests will be used at the time of exporting and image rendering only, this cannot be used once again by others. This approach is similar to the [Amazon Simple Storage Service (Amazon S3)](https://dev.to/idrisrampurawala/share-your-aws-s3-private-content-with-others-without-making-it-public-4k59) how they are providing access to share the private files,

You can get more details of the implementation approach from these steps,

1. Before initiating a non-authentication request, we will send the authenticate request to the server to generate the export and image content.
2. The authenticated request will generate the export with a unique server for the downloadable content and unique id will be shared with the client once the content is ready.
3. After completing the process of generation, we will get the runtime unique key generated from the client and we will do the non-authentication request post action from the client with a unique key to the content for download and image rendering.
4. Once the content revival initiated with the server, we could not make use of this URL again to get the generated content once again from the server because the files will be deleted with the server after initiating the action.

You can find the following code reference for ignoring the Authentication in the filter and the sample from this [link](https://www.syncfusion.com/downloads/support/directtrac/general/ze/BasicAuthApp-1258065845).

    if (context.Request.RequestUri.ToString().Contains("ReportApi/PostReportAction") && HttpContext.Current.Request.Form.Count > 0 && HttpContext.Current.Request.Form.GetValues("reportAction")[0] == "Export")
    {
       return;
    }
    else if (context.Request.RequestUri.ToString().Contains("ReportApi/GetResource"))
    {
    return;
    }

# How to dispose the Web ReportViewer object?

You can destroy the client and server side report viewer processing objects using the [destroy](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/api-reference/methods/#destroy) method.

Example

    <div id="report viewer"></div>
    <script>
        var reportviewerObj = $("#reportviewer").data("boldReportViewer");
        reportviewerObj.destroy();
    </script>

# How to Get the CDN Links for Localization and Culture

In the Bold Reports report viewer, you can localize static text, such as tooltips, parameter blocks, and dialog text, and adjust the culture for a more personalized experience. CDN links are provided for localization and culture scripts based on the culture code. These scripts provide language-specific translations and cultural formatting for different regions.

Each culture code represents a specific language and region. For example, **ar-AE** represents the Arabic language in the United Arab Emirates, **cs-CZ** represents the Czech language in the Czech Republic, **da-DK** represents the Danish language in Denmark, and so on.

The content of each script is similar but tailored to the specific culture. The `ej.localetexts` scripts provide localization resources, such as translated strings and messages used in the user interface. The `ej.culture` scripts provide culture-specific formatting rules, such as date formats, number formats, currency formats, and other cultural conventions.

These scripts enable user interface customization and formatting based on different languages and regions. The formatting of your code can be adjusted to use the CDN links for localization and culture scripts based on the culture code.

        <script src="http://cdn.boldreports.com/{{Bold Reports version}}/scripts/l10n/ej.localetexts.{{Locale code}}.min.js"><script>
        <script src="http://cdn.boldreports.com/{{Bold Reports version}}/scripts/i18n/ej.culture.{{Locale code}}.min.js"><script>

To add localization and culture for the **ar-AE** culture code representing the Arabic language in the United Arab Emirates, use the following CDN links:

        <script src="http://cdn.boldreports.com/5.1.20/scripts/l10n/ej.localetexts.ar-AE.min.js"><script>
        <script src="http://cdn.boldreports.com/5.1.20/scripts/i18n/ej.culture.ar-AE.min.js"><script>

Make sure to replace the version number in the CDN links with the appropriate version you are using for Bold Reports. If you are using a different version, adjust the version number accordingly.

For more details on available culture codes and localization, refer to the provided CDN links for Localization and Culture page provided.

**Note:** You can also get the offline localization script and download it from [here](https://github.com/boldreports/global).

# How to resolve the Routing issue in ASP.NET MVC application?

You will get the issue `Multiple actions were found that matches the request` for report viewer and report designer Web API in the ASP.NET MVC application controller when the Web API is not routed properly with action. You have to create all the Web API methods with the `ActionName` and `NonAction` attributes as shown below.

    public class ReportApiController : ApiController, IReportController
        {
            [System.Web.Http.ActionName("PostReportAction")]
            // Post action for processing the RDL/RDLC report
            public object PostReportAction(Dictionary<string, object> jsonResult)
            {
                return ReportHelper.ProcessReport(jsonResult, this);
            }
    
            // Get action for getting resources from the report
            [System.Web.Http.ActionName("GetResource")]
            [AcceptVerbs("GET")]
    
            public object GetResource(string key, string resourcetype, bool isPrint)
            {
                return ReportHelper.GetResource(key, resourcetype, isPrint);
            }
    
            [NonAction]
            // Method that will be called when initialize the report options before start processing the report
            public void OnInitReportOptions(ReportViewerOptions reportOption)
            {
                // You can update report options here
            }
    
            [NonAction]
            // Method that will be called when reported is loaded
            public void OnReportLoaded(ReportViewerOptions reportOption)
            {
                // You can update report options here
            }
        }

# How to resolve the Bold Reporting components undefined issue?

There are three scenarios in which the Bold Report Viewer or Bold Report Designer undefined issue can occur. The details of the three scenarios and how to resolve them are provided as follows.

### Script reference

If the Bold Report Viewer or the Bold Report Designer scripts are not properly referred, then this issue can occur. Hence, you need to ensure that the Bold Reporting components scripts are properly referred within your application to resolve this issue.

### Using Bold Reports along with EJ1 components

Having the Reporting components in both EJ1 and Bold Reports products, if you refer the common `ej.web.all.min.js` then you will face a conflict with Syncfusion Reporting components and Bold Reports, due to which this issue will occur. When this issue occurs under this scenario, you can refer to [How to use the Bold Reports along with EJ1 controls](https://help.boldreports.com/embedded-reporting/faq/bold-reports-with-ej1-controls/) to resolve the issue.

### Jquery script reference order

The Bold Reporting components will get registered after the `jquery.min.js` is referred. Hence this issue can occur if the `jquery.min.js` is not referred or referred after the Bold Reporting components script references. To resolve this issue, you need to ensure that the Bold Reporting components script references are referred only after the `jquery.min.js` reference.  
  
If you are using the multiple `jquery.min.js` references in your application, then you need to refer the Bold Reporting components script references at the last node of the references so that the instance of the Reporting components gets properly registered.

# Centralized report authoring

Centralized authoring explains how to use the report with authors and multiple developers with several access.

### Is Bold Reports have a centralized report authoring system?

Yes, Bold Reports having On-Premise and Cloud version Report Server to have the reports in centralized report authoring.

You can refer more details from [Bold Report Cloud](https://help.boldreports.com/cloud-reporting/) and [Bold Reports On-Premise](https://help.boldreports.com/enterprise-reporting/#key-features).

# Is the theme studio available for Bold Reports to generate the custom theme?

No, the theme studio is not available for Bold Reports to generate the custom theme. As of now you have to contact our support team with your requirements to get a customized theme.

# What are all the supported HTML tags in Report Viewer?

This section explains the supported HTML tags and the limitations of CSS attributes.

### Supported HTML Tags

1. Hyperlinks: `<A HREF>`
2. Fonts: `<FONT>`
3. Header, style, and block elements: `<H{n}>, <DIV>, <SPAN>, <P>, <DIV>, <LI>, <HN>`
4. Text format: `<B>, <I>, <U>, <S>`

### Limitations of Cascading Style Sheet Attributes

The following is a list of attributes that are supported:

1. text-align, text-indent
2. font-family
3. font-size
4. Only valid RDL size values are supported in absolute CSS length units. Supported units are: in, cm, mm, pt, pc, px, ex, and em.
5. Relative CSS length units are ignored and are not supported. Unsupported units include percentage (%) and rem.
6. color
7. padding, padding-bottom, padding-top, padding-right, and padding-left
8. font-weight

# What are the differences between Embedded Reporting and Report Viewer SDK?

The difference between Embedded Reporting tools and Report Viewer SDK in the Bold Reports Component is detailed in the following table.
|  | Embedded Reporting | Report Viewer SDK |
| --- | --- | --- |
| Bold Reports Cloud Report Server | No | No |
| Bold Reports Enterprise Report Server | Yes | No |
| Report Designer component | Yes | No |
| Report Viewer for application | Yes | Yes |
| Report Writer library (Export Reports to different formats without view) | Yes | Yes |
| Standalone Report Designer for creating Reports | Yes | Yes |

### See also

[Can Syncfusion licenses be used with Bold Reports?](https://help.boldreports.com/embedded-reporting/licensing/faq/can-syncfusion-licenses-be-used-with-bold-reports/)

[Can the Syncfusion community license be used with Bold Reports?](https://help.boldreports.com/embedded-reporting/licensing/faq/can-the-syncfusion-community-license-be-used-with-bold-reports/)

[Can the Report Viewer component be accessed from Bold Reports using Syncfusion community license?](https://help.boldreports.com/embedded-reporting/licensing/faq/can-the-report-viewer-component-be-accessed-from-bold-reports-using-syncfusion-community-license/)

[Does Bold Reports Embedded Reporting Tools or Viewer SDK require additional licensing when deploying an application to Azure App Service?](https://help.boldreports.com/embedded-reporting/licensing/faq/sdk-viewer-licensing/)

​​​​​​​​​​​​

# Is it possible to load the million records report with Report Viewer and Report Writer

Yes, you can load the million records reports with Bold Reports Report Viewer and Report Writer components.

You should use **EnableVirtualEvaluation** and **DisablePageSplitting** API with Report Viewer and Report Writer for handling million records. Find the following reference document.

[Handle larger amount of data with Report Viewer](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/faq/improve-the-performance-while-loading-report-with-huge-data/)

# Can we use the Report Designer component from Syncfusion community license?

No, Syncfusion community license cannot be used for Report Designer and you can use your community license for Report Viewer SDK access only. You should have Bold Reports Embedded plan to use Report Designer in the application.

![embed-reporting-tools.png](https://support.boldreports.com/kb/attachment/article/714/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQyNzQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Nev91j1cdJKhudtyb06VUfvDZtmUwT1z15gln4z3AzQ)

# Does Bold Reports have any licensing procedure for deployment?

Yes, you need licensing token to be registered for Bold Reports development environment. If you are using the Bold reports component in the application level, even if you use the dependencies of the installed build, the licensing will not be imported. The following licensing error will be displayed if the license token is missing in your projects.

This application was built using a trial version of Bold Reports. Include a valid license to remove this license validation message permanently. You can also obtain a free 30 days evaluation license to temporarily remove this message during the evaluation periods.

You need to register the license tokens in your projects. To learn about registering the license token in your projects, refer to this [how to register the Bold Reports license token](https://help.boldreports.com/report-viewer-sdk/licensing/online-license-token/) section.

# How to hide the license watermarks?

The license watermarks will be shown based on license validation in reporting components as per [licensing](https://help.boldreports.com/report-viewer-sdk/licensing/online-license-token/). Bold Reports licensing requires internet connection for the license validation. So, you should ensure the firewall is not blocking the site [http://websiteapi.boldbi.com/](http://websiteapi.boldbi.com/) from your network for license validation. If you don’t have the network problem, then you should ensure the license token registered, as properly with your application as explained in below documentation.

[Register license token for an application](https://help.boldreports.com/report-viewer-sdk/licensing/online-license-token/)

[​](https://help.boldreports.com/report-viewer-sdk/licensing/online-license-token/)Since, the process of our license validation will be at the startup of every application, you have to register the license in the startup of application. The internet license validation will be processed in the place of registering the license token only.

### See Also

[How to upgrade from Trial version after purchasing a license](https://help.boldreports.com/report-viewer-sdk/licensing/faq/how-to-upgrade-from-trial-version-after-purchasing-a-license/)[Where can I get a license token](https://help.boldreports.com/report-viewer-sdk/licensing/faq/where-can-i-get-a-license-token/)[Embedded reporting tools licensing version 1.2.x](https://help.boldreports.com/report-viewer-sdk/licensing/faq/v1.x/)

# Is Bold Reports Embedded Reporting Tools or Viewer SDK requires additional licensing when running application with Azure App service?

No, if you are already having the Bold Reports for your team, then you do not have a need to buy additional license for using your application with Azure App service. As per our instruction, we should register the license token in startup of application as explained in the following documentation.

[License Token](https://help.boldreports.com/report-viewer-sdk/licensing/online-license-token/)

# How to add a WebAPI Data Processing Extension for Report Designer

This articles explains the Data Processing Extensions providing the additional data source supports, which is not available in built-in Report Designer. You can find the following steps to add the WebAPI Data Processing Extension for Report Designer.

1. You need to refer the below attached **webapi.data.js** and **queryinputdialog.js** script files in your application. [Extension scripts](https://www.syncfusion.com/downloads/support/directtrac/general/ze/extension-1130280648.zip)

        ```html
            <head>
                <script src="~/Scripts/extension/webapi.data.js"></script>
                <script src="~/Scripts/extension/queryinputdialog.js"></script>
            </head>
        ```
2. Provide the extension details for ReportDesigner with **ReportDataExtensions** property as shown in following code example.

    **MVC**

            <div style="width:100%; height:100%; position:absolute;">
                @{Html.Bold().ReportDesigner("designer").ServiceUrl("/api/DesignerAPI").   ReportDataExtensions    (ext => { ext.ClassName("WebAPIDataSource").Name("WebAPI".    ImageClass    ("e-reportdesigner-datasource-webapi").DisplayName("WebAPI").Add(; }).    Render();}
            </div>
            @(Html.Bold().ScriptManager())
3. Add the following codes in **script** tag to get a WebAPI dialog when using the WebAPI Extension.

            <script type="text/javascript">
                var qryOptions = null;
                var webApiQueryDialog = null;
                if (ej.isNullOrUndefined(webApiQueryDialog)) {
                    webApiQueryDialog = new QueryInputDialog($('#designer'));
                }
                if (!ej.isNullOrUndefined(webApiQueryDialog)) {
                    qryOptions = {
                        toolbarRendering: $.proxy(webApiQueryDialog.renderToolbarItems, webApiQueryDialog),
                        datasetLoaded: $.proxy(webApiQueryDialog.enableButton, webApiQueryDialog),
                        dataModeChanged: $.proxy(webApiQueryDialog.enableButton, webApiQueryDialog)
                    };
                }
                function controlInitialized(args) {
                    debugger;
                var designer = $("#designer").data('boldReportDesigner');
                    designer.setModel({queryDesignerOptions: qryOptions });
            }
4. Attach the WebAPI Data Processing Extension in your application as shown in following help documentation.

[WebAPI Data Processing Extension](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/data-processing-extensions/webapi-data-processing-extension/)

You can download the following sample for Bold Report Designer with the WebAPI Data Processing Extension.

[MVC Report Designer with WebAPI Data Processing Extension](https://www.syncfusion.com/downloads/support/directtrac/general/ze/MVCReportDesigner318100483.zip)

# How to configure PostgreSQL Data Processing Extension for Report Designer

This section explains the steps required to register and load PostgreSQL data extensions in Web Report Designer application.

### Install PostgreSQL data source extension NuGet

To register and load PostgreSQL data sources in the application install `BoldReports.Data.PostgreSQL` package in the application.

Right-click the project or solution in the *Solution Explorer* tab, and choose **Manage NuGet Packages**. Alternatively, select the **Tools &gt; NuGet Package Manager &gt; Manage NuGet Packages for Solution** menu command.

Search for `BoldReports.Data.PostgreSQL` NuGet package, and install it in your application.​

![postgresql-nuget-designer.png](https://support.boldreports.com/kb/attachment/article/720/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQyOTUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.K5rXqvi_sOC7XsLTDvDr7tyIqaPqy1EOY_1HKwOGdRw)

Register PostgreSQL data source extension in application startup ASP.NET
To register the extension in the ASP.NET Web application, follow the below steps.

1. Open the code-behind file `Global.asax.cs` and add the following using statement.

            using BoldReports.Web;
2. Then register the assembly name `BoldReports.Data.PostgreSQL` in *Application\_Start* using `ReportConfig.DefaultSettings` as follows to use the PostgreSQL data extension.

            protected void Application_Start(object sender, EventArgs e)
            {
                System.Web.Http.GlobalConfiguration.Configuration.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional });
        
                AppDomain.CurrentDomain.SetData("SQLServerCompactEditionUnderWebHosting", true);
        
                //Use the below code to register extensions assembly into report designer
                ReportConfig.DefaultSettings = new ReportSettings().RegisterExtensions(new List<string> { "BoldReports.Data.PostgreSQL" });
            }

### ASP.NET Core

To register the extension in the ASP.NET Core application, follow the below steps.

1. Open the file `Startup.cs` and add the following using statement.

            using BoldReports.Web;
2. Then register the package name `BoldReports.Data.PostgreSQL` in *Startup* as follows using `ReportConfig.DefaultSettings` as follows to use the PostgreSQL data extension.

            public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
            {
                loggerFactory.AddConsole(Configuration.GetSection("Logging"));
                loggerFactory.AddDebug();
        
                AppDomain.CurrentDomain.SetData("SQLServerCompactEditionUnderWebHosting", true);
        
                //Use the below code to register extensions assembly into report designer
                ReportConfig.DefaultSettings = new ReportSettings().RegisterExtensions(new List<string> { "BoldReports.Data.PostgreSQL" });
            }

To register multiple data extensions in the application, provide the assembly name's as list of strings.

# How to configure PostgreSQL Data Processing Extension for Report Viewer

This section explains the steps required to register and load PostgreSQL data extensions in Web Report Viewer application.

### Install PostgreSQL data source extension NuGet

To register and load PostgreSQL data sources in the application install `BoldReports.Data.PostgreSQL` package in the application.

Right-click the project or solution in the *Solution Explorer* tab, and choose **Manage NuGet Packages**. Alternatively, select the **Tools &gt; NuGet Package Manager &gt; Manage NuGet Packages for Solution** menu command.

Search for **BoldReports.Data.PostgreSQL** NuGet package, and install it in your application.

![postgresql-nuget.png](https://support.boldreports.com/kb/attachment/article/721/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQyOTYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.IVXsXfFDjIUKy_xg8LdQKDgB9UCFoILMJ-FliGKAPOo)

Register PostgreSQL data source extension in application startup ASP.NET

####   

To register the extension in the ASP.NET Web application, follow these steps.

1. Open the code-behind file `Global.asax.cs` and add the following using statement.

            using BoldReports.Web;
2. Then register the assembly name `BoldReports.Data.PostgreSQL` in `Application_Start` using `ReportConfig.DefaultSettings` as follows to use the PostgreSQL data extension.

            protected void Application_Start(object sender, EventArgs e)
            {
                System.Web.Http.GlobalConfiguration.Configuration.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional });
        
                AppDomain.CurrentDomain.SetData("SQLServerCompactEditionUnderWebHosting", true);
        
                //Use the below code to register extensions assembly into report designer
                ReportConfig.DefaultSettings = new ReportSettings().RegisterExtensions(new List<string> { "BoldReports.Data.PostgreSQL" });
            }

### ASP.NET Core

To register the extension in the ASP.NET Core application, follow these steps.

1. Open the file `Startup.cs` and add the following using statement.

            using BoldReports.Web;
2. Then register the package name `BoldReports.Data.PostgreSQL` in `Startup` as follows using `ReportConfig.DefaultSettings` as follows to use the PostgreSQL data extension.

         public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
            {
                loggerFactory.AddConsole(Configuration.GetSection("Logging"));
                loggerFactory.AddDebug();
        
                AppDomain.CurrentDomain.SetData("SQLServerCompactEditionUnderWebHosting", true);
        
                //Use the below code to register extensions assembly into report designer
                ReportConfig.DefaultSettings = new ReportSettings().RegisterExtensions(new List<string> { "BoldReports.Data.PostgreSQL" });
            }

To register multiple data extensions in the application, provide the assembly names as a list of strings.

# How to configure WebAPI Data Processing Extension for Report Viewer

This section explains the steps required to register and load WebAPI data extensions in Web Report Viewer application.

### Install WebAPI data source extension NuGet

To register and load WebAPI data sources in the application install **BoldReports.Data.WebData** package in the application.

Right-click the project or solution in the *Solution Explorer* tab, and choose **Manage NuGet Packages**. Alternatively, select the **Tools &gt; NuGet Package Manager &gt; Manage NuGet Packages for Solution** menu command.

Search for **BoldReports.Data.WebData** NuGet package, and install it in your application.![webapi-nuget.png](https://support.boldreports.com/kb/attachment/article/722/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzOTAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.xhuw32K5vkbTMqIC92W_RMnAZpRZfCBq9Adpv7tThmY)

### Register WebAPI data source extension in application startup

### ASP.NET

To register the extension in the ASP.NET Web application, follow these steps.

1. Open the code-behind file `Global.asax.cs` and add the following using statement.

            using BoldReports.Web;
2. Then register the assembly name `BoldReports.Data.WebData` in **Application\_Start** using `ReportConfig.DefaultSettings` as follows to use the WebAPI data extension.

            protected void Application_Start(object sender, EventArgs e)
            {
                System.Web.Http.GlobalConfiguration.Configuration.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional });
        
                AppDomain.CurrentDomain.SetData("SQLServerCompactEditionUnderWebHosting", true);
        
                //Use the below code to register extensions assembly into report designer
                ReportConfig.DefaultSettings = new ReportSettings().RegisterExtensions(new List<string> { "BoldReports.Data.WebData" });
            }

### ASP.NET Core

To register the extension in the ASP.NET Core application, follow these steps.

1. Open the file `Startup.cs` and add the following using statement.

            using BoldReports.Web;
2. Then register the package name `BoldReports.Data.WebData` in **Startup** as follows using `ReportConfig.DefaultSettings` as follows to use the WebAPI data extension.

            public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
            {
                loggerFactory.AddConsole(Configuration.GetSection("Logging"));
                loggerFactory.AddDebug();
        
                AppDomain.CurrentDomain.SetData("SQLServerCompactEditionUnderWebHosting", true);
        
                //Use the below code to register extensions assembly into report designer
                ReportConfig.DefaultSettings = new ReportSettings().RegisterExtensions(new List<string> { "BoldReports.Data.WebData" });
            }

To register multiple data extensions in the application, provide the assembly name's as list of strings.

# How to pass JSON data in the Bold Reports Report Viewer and Report Writer

You have to Convert the objects from JSON data as shown in the following code example.

    string json = System.IO.File.ReadAllText(@"<App Location>\App_Data\categories.json");
    Categories Categories = JsonConvert.DeserializeObject<Categories>(json);
    
    writer.DataSources.Clear();
    writer.DataSources.Add(new ReportDataSource( Name = "Categories", Value = Categories.ToList()));
    
    public class Categories : List<Category>
    {
    
    }
    
    public class Category
    {
      public int CategoryID { get; set; }
      public string Description { get; set; }
      public string Name { get; set; }
    }

You can refer the following documentation for passing the business object data for RDLC report in the Report Viewer and Report Writer.

### Report Viewer

[JavaScript Report Viewer](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/rdlc-report/#bind-data-source-in-web-api-controller)

[ASP.NET WebForms Report Viewer](https://help.boldreports.com/embedded-reporting/aspnet-web-forms-reporting/report-viewer/rdlc-report/#bind-data-source-in-web-api-controller)

[ASP.NET MVC Report Viewer](https://help.boldreports.com/embedded-reporting/aspnet-mvc-reporting/report-viewer/rdlc-report/#bind-data-source-in-web-api-controller)

[ASP.NET Core Report Viewer](https://help.boldreports.com/embedded-reporting/aspnet-core-reporting/report-viewer/rdlc-report/#bind-data-source-in-web-api-controller)

### Report Writer

[ASP.NET Core Report Writer](https://help.boldreports.com/embedded-reporting/aspnet-core-reporting/report-writer/export-rdlc-report/#bind-data-source-in-web-api-controller)

# How to upgrade or downgrade reports using Bold Reports Designer

The user can upgrade or downgrade the reports between 2008, 2010 or 2016 RDL schema versions using the Version option. This option is provided under the Report Properties in properties panel

![version-option.png](https://support.boldreports.com/kb/attachment/article/725/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzMDAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.bdaHw05sjt31VzCJrCFHCdenSiEdXSrBkSUUJAGFJWk)

**Default** - It refers to the 2016 RDL schema version. When user creates a new report, by default the schema version is set to 2016.

**RDL2010** - Upgrades or downgrades report to 2010 RDL schema version.

**RDL2016** - Upgrades the report to 2016 RDL schema version.

### Steps to upgrade or downgrade reports

Follow the below steps to upgrade or downgrade the report using Bold Reports Designer,

1. Launch Enterprise Server application and edit a target report  
![open-report.png](https://support.boldreports.com/kb/attachment/article/725/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzMDEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.6fBabxYYFqqZaTVOJ8648YQFslNuhQNeyVL8BkXhjgY)
2. Open [Report Properties](https://help.boldreports.com/standalone-report-designer/designer-guide/compose-report/report-properties/). Under `Miscellaneous` category, choose the target version in `Version` property drop-down  
![choose-version.png](https://support.boldreports.com/kb/attachment/article/725/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzMDIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.z5qbv4lWkUGzDC5_aWkOEgZf5teA7ohhZL3T3H0RRto)
3. Now, save the report.

### Upgrading

You can upgrade reports as tabulated below,

| Current version | Target version |
| --- | --- |
| 2008 schema version | User can upgrade the reports to 2010 or 2016 schema version |
| 2010 schema version | User can upgrade the reports to 2016 schema version |

### Downgrading

You can downgrade reports as tabulated below,

| Current version | Target version |
| --- | --- |
| 2016 schema version | User can downgrade the reports to 2010 schema version |

# Why should you migrate to Bold Reports from Syncfusion Report Platform

As per our plan to have a separate suite for the reporting components, we have introduced Bold Reports from Syncfusion. Due to the migration to Bold reports, there will be no further feature updates for Syncfusion Report Platform. So, you need to consider using our Bold Reports for your developments.

### See also

[What are the differences in Bold Reports licensing models](https://help.boldreports.com/embedded-reporting/licensing/faq/what-are-the-difference-in-bold-reports-licensing-models/)

[Can Syncfusion licenses be used with Bold Reports?](https://help.boldreports.com/embedded-reporting/licensing/faq/can-syncfusion-licenses-be-used-with-bold-reports/)

[Can the Syncfusion community license be used with Bold Reports](https://help.boldreports.com/embedded-reporting/licensing/faq/can-the-syncfusion-community-license-be-used-with-bold-reports/)

[Can the Report Viewer component be accessed from Bold Reports using Syncfusion community license](https://help.boldreports.com/embedded-reporting/licensing/faq/can-the-report-viewer-component-be-accessed-from-bold-reports-using-syncfusion-community-license/)

[Does Bold Reports Embedded Reporting Tools or Viewer SDK require additional licensing when deploying an application to Azure App service](https://help.boldreports.com/embedded-reporting/licensing/faq/sdk-viewer-licensing/)

[Migrating Reporting Application](https://help.boldreports.com/embedded-reporting/installation/migrate-reporting-tools/)

# Can specify ReportServer URL in Web API controller?

Yes, you can specify the [`reportServerUrl`](https://help.boldreports.com/report-viewer-sdk/javascript-reporting/report-viewer/api-reference/members/#reportserverurl) property in Web API controller as shown in the following code snippet.
[NonAction]
    public void OnInitReportOptions(ReportViewerOptions reportOption)
    {
      reportOption.ReportModel.ReportServerUrl = "https://testing.SSRS.Server.com";
    }

# How to connect the Report Server Report Service with application API?

1. You have to follow the documentation for creating the [service](https://help.boldreports.com/embedded-reporting/aspnet-core-reporting/report-viewer/reportserver-report/) for your application,
2. You have to make use of the `ReportHelper.ReportServiceURL` and `ReportHelper.ServiceAuthorizationToken` to connect with the Report Server service from application service.

You have to use this download [link](https://www.syncfusion.com/downloads/support/directtrac/general/ze/ReportServerIntermediateService1526659494.zip) for getting the sample service application for connecting the Report server with application API.

### See also

[How to change the report datasource dynamically based on customer id?](https://help.boldreports.com/report-viewer-sdk/how-to/change-the-report-datasource-dynamically/)

# How to resolve the Multiple actions were found that matches the request issue when using ASP.NET MVC application?

You will get the issue `Multiple actions were found that matches the request` for report viewer and report designer Web API in the ASP.NET MVC application controller, when Web API is not routed properly with action. You have to create all the Web API methods with `ActionName` and `NonAction` attributes as like below,

        public class ReportApiController : ApiController, IReportController
        {
            [System.Web.Http.ActionName("PostReportAction")]
            // Post action for processing the RDL/RDLC report
            public object PostReportAction(Dictionary<string, object> jsonResult)
            {
                return ReportHelper.ProcessReport(jsonResult, this);
            }
    
            // Get action for getting resources from the report
            [System.Web.Http.ActionName("GetResource")]
            [AcceptVerbs("GET")]
    
            public object GetResource(string key, string resourcetype, bool isPrint)
            {
                return ReportHelper.GetResource(key, resourcetype, isPrint);
            }
    
            [NonAction]
            // Method that will be called when initialize the report options before start processing the report
            public void OnInitReportOptions(ReportViewerOptions reportOption)
            {
                // You can update report options here
            }
    
            [NonAction]
            // Method that will be called when reported is loaded
            public void OnReportLoaded(ReportViewerOptions reportOption)
            {
                // You can update report options here
            }
        }

# How to use the Report Viewer with camel case serializer settings application?

If you are using the camel serializer for our application, then will have a problem in processing API result with Report Viewer. So, you have to use the default resolver for using the Report Viewer and Designer.

      config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

You can refer the following code snippet to resolve to set the default serializer for Report Viewer Web API with ASP.NET MVC.

        public class DefaultCaseControllerConfigAttribute : Attribute, System.Web.Http.Controllers.IControllerConfiguration
        {
            public void Initialize(System.Web.Http.Controllers.HttpControllerSettings controllerSettings, System.Web.Http.Controllers.HttpControllerDescriptor controllerDescriptor)
            {
                var formats = controllerSettings.Formatters.OfType<System.Net.Http.Formatting.JsonMediaTypeFormatter>().ToList();
    
                foreach (var format in formats)
                {
                    controllerSettings.Formatters.Remove(format);
                }
    
                var formatter = new System.Net.Http.Formatting.JsonMediaTypeFormatter
                {
                    SerializerSettings = { ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver() }
                };
    
                controllerSettings.Formatters.Add(formatter);
            }
        }
    
        [DefaultCaseControllerConfigAttribute]
        public class RreportApiController : ApiController, IReportController
        {
    
        }

# What is the Difference between Report Service URL and Report Server URL?

### Report Service URL

Bold Reports Reporting components are built with the architecture of client-server technology. You should have server side Web API service with ASP.NET Core or ASP.NET MVC for using our components and need to assign created API URL with `reportServiceURL` API for server integration.

You can make use of the following references, to create or use existing Web API service for our Reporting components:

- [Bold Reports Report Server built-in service for Report Viewer](https://help.boldreports.com/enterprise-reporting/developer-guide/embed-in-application/view-report-through-report-viewer/)
- [Bold Reports Report Server built-in service for Report Designer](https://help.boldreports.com/enterprise-reporting/developer-guide/embed-in-application/integrating-report-designer/)
- [Create ASP.NET Core Web API for Report Viewer](https://help.boldreports.com/report-viewer-sdk/javascript-reporting/report-viewer/report-service/create-aspnet-core-web-api-service/)
- [Create ASP.NET MVC Web API for Report Viewer](https://help.boldreports.com/report-viewer-sdk/javascript-reporting/report-viewer/report-service/create-aspnet-web-api-service/)

### Report Server URL

Bold Reports Reporting components provides support to use the reports directly from SQL Server Reporting Services (SSRS) and Bold Reports Report Server. If you are going to use the feature of using the reports from SQL Server Reporting Services (SSRS) and Bold Reports Report Server, then you have to provide the server URL information to our Reporting components using the `reportServerURL` API for report processing.

You can refer to the following sections to make use of the report server URL, in order to use the reports from Report Server in our Reporting components:

- [Bold Reports Report Server Reports with Report Viewer](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/reportserver-report/)
- [SSRS Reports with Report Viewer](https://help.boldreports.com/report-viewer-sdk/javascript-reporting/report-viewer/ssrs-report/)

# Why http authorization headers are not being set for all requests?

Http authorization headers not being set for all requests on Report Viewer and Report Designer in ASP.NET Core and ASP.NET MVC applications because of the following reasons mentioned in the table.

| Report Action | Action Name | Request type | Component | Headers | Comments |
| --- | --- | --- | --- | --- | --- |
| Report Rendering | PostReportAction | POST | Report Viewer, Report Designer | Yes | No |
| Report Exporting (ASP.NET MVC) | PostReportAction | POST | Report Viewer, Report Designer | No | This request is to download the exporting document from Report Viewer and Report Designer applications with Form post action. So, the request headers cannot be passed with this action. Regarding the security, you can refer more details from this [link](https://help.boldreports.com/report-viewer-sdk/how-to/resolve-the-image-render-and-export-issue-with-asp.net-mvc-authentication/). |
| Report Exporting (ASP.NET Core) | PostFormReportAction | POST | Report Viewer, Report Designer | No | This request is to download the exporting document from Report Viewer and Report Designer applications with Form post action. So, the request headers cannot be passed with this action. Regarding the security, you can refer more details from this [link](https://help.boldreports.com/report-viewer-sdk/how-to/resolve-the-image-render-and-export-issue-with-asp.net-core-authentication/). |
| Image Rendering | Get Resource | GET | Report Viewer, Report Designer | No | This request is to render the image items with Report Viewer and Report Designer applications. Since, this request URL is used with HTML image src attribute, you cannot add additional headers for this request and you can refer more details from this [link](https://help.boldreports.com/report-viewer-sdk/how-to/resolve-the-image-render-and-export-issue-with-asp.net-mvc-authentication/). |
| Report Designing | PostDesignerAction | POST | Report Designer | Yes | No |
| Report Save (ASP.NET MVC) | PostDesignerAction | POST | Report Designer | No | This request method is used for the download process (save the report in the device), upload process (open the report from the device), and add an image (open the image from the device). You cannot use further to get the data from the server. |
| Report Save (ASP.NET Core) | PostFormDesignerAction | POST | Report Designer | No | This request method is used for the download process (save the report in the device), upload process (open the report from the device), and add an image (open the image from the device). You cannot use further to get the data from the server. |
| Open Report and Add image | UploadReportAction | POST | Report Designer | Yes | No |
| Image Manager Images Reporting | GetImage | GET | Report Designer | No | This request is to render the image items with Report Viewer and Report Designer applications. Since, this request URL is used with HTML image src attribute, you cannot add additional headers for this request and you can refer more details from this [link](https://help.boldreports.com/report-viewer-sdk/how-to/resolve-the-image-render-and-export-issue-with-asp.net-mvc-authentication/). |

# Why should not use Produces attribute in web API controller?

[Produces](https://docs.microsoft.com/en-us/aspnet/core/web-api/advanced/formatting?view=aspnetcore-3.1#specify-a-format) attribute forces all actions within the controller to return JSON-formatted responses. `ReportHelper` itself will provide the processing data with JSON string. So, there is no need to use produces attribute in Web API controller and actions for converting the JSON also should not be changed for other types.

       public object PostReportAction(Dictionary<string, object> jsonResult)
        {
            return ReportHelper.ProcessReport(jsonResult, this);
        }

# Controlled folder access and the protected file usage

[Controlled folder access](https://docs.microsoft.com/en-us/windows/security/threat-protection/microsoft-defender-atp/controlled-folders) helps you protect valuable data from malicious apps and threats, such as [ransomware](https://docs.microsoft.com/en-us/windows/security/threat-protection/intelligence/ransomware-malware). Controlled folder access is included with Windows 10 and Windows Server 2019. When you enable the ransomware protection in your machine, the applications will be restricted to access the protected folders in your machine.

If the Bold Reports Embedded Reporting Tools or its related executable are not allowed to access the protected folders in your machine when the ransomware protection is enabled, follow the below-mentioned steps to provide access to Bold Reports application for accessing the protected folders.

You will receive notifications from Windows when an application is blocked from accessing the protected folders. For example, the following message will be displayed when you are trying to preview the dashboard with ransomware protection enabled.

![application-block-notification.df42093.a4d509cb7fdd1b0bcedfa3950d75dc4b.png](https://support.boldreports.com/kb/attachment/article/736/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzMDkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Lj9pXT8prQbngwd-1b0qyV0jMF62RSFMI_2UETDsNEk)

### Steps to allow Bold Reports Embedded Reporting Tools to access protected folders

- Open the Ransomware protection in Windows security using the start menu.  
![search-controlled-folder.13f6e1f.f8f2cc3fb260525b11ac113a360e2472.png](https://support.boldreports.com/kb/attachment/article/736/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzMTAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.HfWCxSHQDqGqy28UrZ53H4aCMMA9jlhpRzsBBj_rX_Y)
- Click the option `Allow an app through Controlled folder access`.  
![allow-protection.b4475a4.54f6f6f891f7fa581e82de6cd34d5eae.png](https://support.boldreports.com/kb/attachment/article/736/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzMTEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.qJAsDGwvYr_2l9fD9UO07oPdBfAFppujlLCTinRPjqc)

- The list of applications will be shown that can access the protected folders in your machine and click the `Add an allowed app` option.![add-blocked-application.b2e1c9a.bc1dc23e0430336ec4d6349427b9721a.png](https://support.boldreports.com/kb/attachment/article/736/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzMTIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.A7_rSdu3HnH_mheMuYzfbTrRftp5xRQy1n5pBPyle0Y)

- It will help you choose which application should be allowed to access the protected folder by showing recently blocked apps and all apps.  ![recently-blocked.e9949b5.2d3cf56abe8b7616ac24c47252cdcc12 (1).png](https://support.boldreports.com/kb/attachment/article/736/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzNTkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.PBzTZJeX96VMOJgAnJg1PrWdCTaWOrKZqGAmpLhyhLk)

You can click any one of the options and choose the Bold Reports Embedded Reporting Tools related applications.

![recently-blocked-applications.0fb6506.44e62444e764139f307866e0e2a8b643 (1).png](https://support.boldreports.com/kb/attachment/article/736/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzNjMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.UK3yplLMtIN0uIVxEyk_qxrdE7hF9NYeSQOLkons6S0)

- Allow the iisexpress and the Bold Reports Embedded Reporting Tools related apps to access your protected folders if the application is blocked in your machine.  

    | Application | Path |
    | --- | --- |
    | iisexpress.exe | C:\Program Files (x86)\IIS Express |
    | Bold Reports Embedded Reporting Tools Sample Browser Launcher | C:\Program Files (x86)\Bold Reports\Embedded Reporting Tools\Utilities\StartSampleBrowserReportingTools\StartSampleBrowserReportingTools.exe |

- Now, you can continue to use the Bold Reports Embedded Reporting Tools without blocking any operations to your protected folders.

### References

[https://docs.microsoft.com/en-us/windows/security/threat-protection/microsoft-defender-atp/enable-controlled-folders](https://docs.microsoft.com/en-us/windows/security/threat-protection/microsoft-defender-atp/enable-controlled-folders)

[https://docs.microsoft.com/en-us/windows/security/threat-protection/microsoft-defender-atp/customize-controlled-folders#allow-specific-apps-to-make-changes-to-controlled-folders](https://docs.microsoft.com/en-us/windows/security/threat-protection/microsoft-defender-atp/customize-controlled-folders#allow-specific-apps-to-make-changes-to-controlled-folders)

# How to use the Bold Reports along with EJ1 controls

We are having the Reports component in both EJ1 and Bold Reports products. So, if you referring the common **web.all.min.js** then Report Viewer conflict with EJ and Bold Reports product. So you can specify the component script instead of referring the **web.all.min.js** script in your application when using the EJ1 component along with the Bold Reports component.

For example, if you want to use the EJ1 Gird item along with BoldReports Report Viewer component then you can specify the **ej.grid.min.js**. You can find the following example for your reference.
<script src="https://cdn.boldreports.com/external/jquery-1.10.2.min.js" type="text/javascript"></script>
     <script src="https://cdn.boldreports.com/2.2.32/scripts/common/bold.reports.common.min.js"></script>
     <script src="https://cdn.boldreports.com/2.2.32/scripts/common/bold.reports.widgets.min.js"></script>
    
     <!--EJ1 Grid component script reference.-->
     <script src="https://cdn.syncfusion.com/18.1.0.42/js/web/ej.grid.min.js"></script>
    
     <!--Bold Reports Report Viewer component script-->
     <script src="https://cdn.boldreports.com/2.2.32/scripts/bold.report-viewer.min.js"></script>

# How to use the ReportViewer along with EJ2 controls

For using the Bold Reports with EJ1, you need to ensure the compatibility styles, the script order is maintained with following suggestions:

### Styles

For style, you need to refer the compatibility styles of EJ2 from Bold Reports and Bold Reports styles should be referred before EJ2 styles.

      <link href="https://cdn.syncfusion.com/ej2/styles/compatibility/material.css" rel="stylesheet" />
      <link href="https://cdn.boldreports.com/{{site.releaseversion}}/content/bold.widgets.core.compatibility.min.css" rel="stylesheet" />
      <link href="https://cdn.boldreports.com/{{site.releaseversion}}/content/material/bold.theme.compatibility.min.css" rel="stylesheet" />

### Scripts

You should refer EJ2 scripts before Bold Reports scripts as follows.

    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>BoldReports ReportViewer and EJ2 controls</title>
        @* Syncfusion Essential JS 2 Styles *@
        <link rel="stylesheet" href="https://cdn.syncfusion.com/ej2/styles/compatibility/material.css" />
        @* BoldReports Styles *@
        <link href="https://cdn.boldreports.com/{{site.releaseversion}}/content/bold.widgets.core.compatibility.min.css" rel="stylesheet" />
        <link href="https://cdn.boldreports.com/{{site.releaseversion}}/content/material/bold.theme.compatibility.min.css" rel="stylesheet" />
        @*Default scripts*@
        <script src="http://code.jquery.com/jquery-1.10.2.min.js" type="text/javascript"></script>
        <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.3/jquery.easing.min.js" type="text/javascript"></script>
        <script src="http://cdn.syncfusion.com/js/assets/external/jsrender.min.js"></script>
        @* Syncfusion Essential JS 2 Scripts *@
        <script src="https://cdn.syncfusion.com/ej2/dist/ej2.min.js"></script>
        @* BoldReports Scripts *@
        <script src="https://cdn.boldreports.com/{{site.releaseversion}}/scripts/common/bold.reports.common.min.js"></script>
        <script src="https://cdn.boldreports.com/{{site.releaseversion}}/scripts/common/bold.reports.widgets.min.js"></script>
    
        <!--Used to render the chart item. Add this script only if your report contains the chart report item.-->
        <script src="https://cdn.boldreports.com/{{site.releaseversion}}/scripts/data-visualization/ej.chart.min.js"></script>
    
        <!-- Report Viewer component script-->
        <script src="https://cdn.boldreports.com/{{site.releaseversion}}/scripts/bold.report-viewer.min.js"></script>
    </head>

If your application is already using any of the essential JS2 without `ej2.min.js`, then refer the Bold Reports EJ2 dependent scripts from Syncfusion.

    <head>
     @* Syncfusion Essential JS 2 Scripts *@
        <script src="https://cdn.syncfusion.com/ej2/ej2-buttons/dist/global/ej2-buttons.min.js"></script>
        @* BoldReports Scripts *@
       <!--Used to render the gauge item. Add this script only if your report contains the gauge report item. -->
       <script src="https://cdn.syncfusion.com/ej2/ej2-base/dist/global/ej2-base.min.js"></script>
       <script src="https://cdn.syncfusion.com/ej2/ej2-data/dist/global/ej2-data.min.js"></script>
       <script src="https://cdn.syncfusion.com/ej2/ej2-pdf-export/dist/global/ej2-pdf-export.min.js"></script>
       <script src="https://cdn.syncfusion.com/ej2/ej2-svg-base/dist/global/ej2-svg-base.min.js"></script>
       <script src="https://cdn.syncfusion.com/ej2/ej2-lineargauge/dist/global/ej2-lineargauge.min.js"></script>
       <script src="https://cdn.syncfusion.com/ej2/ej2-circulargauge/dist/global/ej2-circulargauge.min.js"></script>
    
    </head>

Reference of EJ2 scripts from Bold Reports and Syncfusion components.

//Ej2
    <script src=�https://cdn.syncfusion.com/�/�/ej2-maps.min.js�></script>
    //BoldReports
    <script src=�https://cdn.boldreports.com/�/�/ej2-maps.min.js�></script>

### Script compatibility for ASP.NET Core

Add compatibility, use the following code in the **Layout.cshtml** page. Since BoldReports components and EJ2 controls have same library names to perform different actions, conflicts may occur when you refer these both controls in same application. To overcome this, extend these libraries in ej namespace in ASP.NET Core platform.

        <script>
            var dataCopy = Object.assign({}, ej.data);
            $.extend(ej, Syncfusion);
            $.extend(ej.data, dataCopy);
        </script>

### Using EJ2 components with JavaScript

Hence, while using the EJ2 components along with Bold Reports, `ejs` should be used as the reference to initialize the EJ2 components.

For example, if you are using the EJ2 grid component along with Bold Reports, then you need to initialize the grid component using the following code sample.

    var grid = new ejs.grids.Grid({dataSource: data});

### See also

[How to use Bold Reports with Syncfusion Blazor?](https://help.boldreports.com/embedded-reporting/blazor-reporting/report-viewer/how-to/use-bold-reports-with-syncfusion-blazor/)

# How to Apply Bold Reports Custom NuGet Packages

You are having two options to apply the patched NuGet packages in development environment. You can find the details as follows.

### Apply Custom NuGet packages using the Visual Studio

You have to use the Visual Studio package manager to restore the custom package from the location of having the Custom NuGet packages. You can find the details as follows.

1. First, close your project in Visual Studio.
2. Delete the bin and obj folders from the project location.
3. Open the following location with help of Run.`%USERPROFILE%\.nuget\packages\`. Remove the `boldreports.net.core` folder.
4. Download the provided NuGet packages.
5. Unblock the downloaded zip file and Unzip the downloaded file  
![unblock-custom-packages.3b6e8e5.8e5778602816a245c49932417ec11f39.png](https://support.boldreports.com/kb/attachment/article/739/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzMTYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.6ZGPGs_Ir32uKofnfZyxTfR0npmXR_7Dmg1dMmWBpJY)
6. Open the Visual Studio NuGet package manager.
7. Select the Settings icon in the Package Manager UI outlined as follows  
![package-source-settings.dcce7b9.fa457b9bd901557205fe596877d0288a.png](https://support.boldreports.com/kb/attachment/article/739/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzMTciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.NxNT4l4wU2F6g5JRkxYEDdtxiuooJNr2oA6iXnJBsYA)
8. Add a source, select +, edit the name, enter the custom package path in the Source control, and select Update. The source now appears in the selector drop-down.

    ![add-custom-package.9739285.fa54e572e13dc6e56abf983b3b5a42c9.png](https://support.boldreports.com/kb/attachment/article/739/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzMTgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.K42SBoalGyzNRRmnoBjaClTCO3sVO2REbD3fKC3omPQ)
9. Now, choose the newly added source in package source drop-down and select it.

    ![install-package.74c6e20.93834857239e996c55e91bc6eec2d784.png](https://support.boldreports.com/kb/attachment/article/739/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzMTkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.z5Npkby9pGWjOtPuBS2Nd2a2ITfl5nfa66xRGpb_SsM)
10. Install the Custom NuGet Packages.

### Replaced the assemblies manually

You have to use the Visual Studio package manager to restore the custom package from the location of having the Custom NuGet packages.

1. First, close your project in Visual Studio.
2. Delete the bin and obj folders from the project location.
3. Download the provided NuGet packages.
4. Unblock the downloaded zip file and Unzip the downloaded file.

    ![unblock-custom-packages.3b6e8e5.8e5778602816a245c49932417ec11f39 (1).png](https://support.boldreports.com/kb/attachment/article/739/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzMjEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.7CDCl3PA1ZSHAKwJDJl44zKdc_OlBIhBaVwkSUANF4o)
5. Extract NuGet package using the 7-Zip extractor.

    ![7zip-extracter.764c54b.8e2f5cac1301057670af567bc372176d.png](https://support.boldreports.com/kb/attachment/article/739/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzMjIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.2p6YrcS6Uq0KZE2W-zjUUt505hiWaSIjaqUTJq2yzLY)
6. If you do not have the 7-zip, then change the `nupkg` file name as `Zip` and extract using the zip extractor.

    ![nupkg-to-zip.1d18745.7f24020933c0b8867b1019cecd352f3d.png](https://support.boldreports.com/kb/attachment/article/739/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzMjMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.8x89NdmcSDDKmCRp2BzKdxo6SgrO3_ZabBE1Y37a9Z8)
7. Copy all folders from the lib or specific framework that you are using.
8. Open the following location with help of Run.`%USERPROFILE%\.nuget\packages\boldreports.net.core\{{site.releaseversion}}\lib`. Pasted the copied files.
9. Now, you can open and compile the project, this will use the provided patch assembly from the NuGet cache restored in your system.

# How to deploy PhantomJS WebKit manually

PhantomJS is a headless WebKit script able with JavaScript. It is a free software/open source that may contain MIT, BSD, LGPL or GPL, or other similar licenses It contains third-party code. This executable file is necessary to export the data visualization report items during export schedules. Without this, the data visualization report items no longer available in the exported schedules. It is your decision if you choose to download Phantom JS, but you must accept all of their terms and conditions if you want to use it with Syncfusion’s products.

To download the PhantomJS application and deploy it on your machine, you should accept its license terms on [LICENSE](https://github.com/ariya/phantomjs/blob/master/LICENSE.BSD) and [Third-Party](https://github.com/ariya/phantomjs/blob/master/third-party.txt) document. Then, you can download PhantomJS by clicking this [link](https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-windows.zip).

Once download completed, extract the zip file and then copy the PhantomJS application from `{Extracted Location}\PhantomJS-2.1.1-windows\bin` and paste it in the below mentioned deploy location.

**Install Location:**

Please place the PhantomJS executable file in the location. `{Deployed Location}\BoldServices\app_data\reporting\exporthelpers`

**Example:**

`C:\BoldServices\app_data\reporting\exporthelpers\phantomjs.exe`

# How to resolve the Syncfusion components undefined issue when using the Bold Reporting components

There are two scenarios, in which the Syncfusion components undefined issue can occur. The details of the two scenarios and how to resolve them are provided as follows.

### Script reference

If the `bold.reports.common.min.js` or the `bold.reports.widgets.min.js` scripts are not properly referred, then this issue can occur. Hence, you need to ensure that these scripts are properly referred within your application, in order to resolve this issue.

![ej-components-undefined.8623c19.c0403a7a1dbf4f83e4165b1664c4d481.png](https://support.boldreports.com/kb/attachment/article/741/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzMjQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.oGJWabuCkUUo1U5Y0r8AgV25Qm39ds6kJPAYUS2ww1Y)

### Using Bold Reports along with EJ2 components

The Bold Reports uses the Syncfusion EJ1 components for internal, which uses the `ej` as reference. Hence, while using the EJ2 components along with bold reports `ejs` should be used as the reference to initialize the EJ2 components.

For example, if you are using the EJ2 grid component along with Bold Reports, then you need to initialize the grid component using the following code sample.

    var grid = new ejs.grids.Grid({dataSource: data});

![ej2-components-undefined.c350391.4fc2d5da86f84ccabac3bca95d7e4afb.png](https://support.boldreports.com/kb/attachment/article/741/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzMjUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.uEEQZ5H_Yk9A-oM95SfbHfmRCUT0imTKyWU9vz3Lmxw)

### See also

[How to resolve the Bold Reporting components undefined issue?](https://help.boldreports.com/embedded-reporting/how-to/resolve-bold-reporting-components-undefined-issue/)

[How to use BoldReports ReportViewer with EJ2 controls?](https://help.boldreports.com/embedded-reporting/faq/bold-reports-with-ej2-controls/)

[How to use BoldReports ReportViewer with EJ1 controls?](https://help.boldreports.com/embedded-reporting/faq/bold-reports-with-ej1-controls/)

# How to replace the custom patch in Standalone Report Designer

Replace the custom assembly patch as shown in the following steps.

1. First, close your Standalone Report Designer application.
2. Download the provided custom patch files.
3. Go to Standalone Report Designer installed location as shown in the following image.   
![designer-custom-patch.b867ebb.a54504fa8abdcbc25167096833daf766.png](https://support.boldreports.com/kb/attachment/article/742/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzMjYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.yCKAnVz1xH9-5mu08TBcCJXeBG0yuS-GoFF0JCx1GAA)
4. Replace the downloaded patch files in Report Designer installed location.

# Silent installation

The silent installation steps are applicable only for version 1.2.7 and below.

1. Double click the Embedded Reporting Tools setup.
2. Embedded Reporting Tools setup will be extracted in temp location (%temp%).   
![silent-installation-setup-path.09bc54b.a60fb9f7b6071ad5ba06c4ce5327ccf7.png](https://support.boldreports.com/kb/attachment/article/743/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzMjciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.OCz68gWo5_2HINBlm7q7mz3eMykC_1tLvPlICMCr6Z8)
3. Copy that extracted Embedded Reporting Tools setup to some other location and cancel the installation.
4. Open the command prompt with administrative privileges and run the extracted Embedded Reporting Tools setup with the following arguments.

    **Arguments:**`/Install silent /InstallPath:{InstallationPath} /pidkey:{unlock_key} /isdesktopdhortcut:{TRUE or FALSE}/Log "{LogFilePath\filename.log}"`

    **Example:**`/Install silent /InstallPath:C:\Program Files (x86)\New\Report /pidkey:@1243453sdffdfvv /isdesktopshortcut:TRUE /Log "C:\Program Files (x86)\New\Install.log"`

    ![silent-installation.9377235.7cab4f768a0f637ec068bd832027d9f8.png](https://support.boldreports.com/kb/attachment/article/743/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzMjgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.nFeptJc039sK6j6_tI8sQ3SnFd4SnNYIYqA7amHSeDw)
5. Now, Embedded Reporting Tools setup has been installed in silent mode.

# Troubleshooting Embedded Reporting Tools

If you
are facing issues with launching the `Bold Reports Embedded Reporting Tools` local
samples follow the below troubleshooting mechanism.

## ​**If you face     problem regarding controlled folder access(Ransomware protection)     permission for Bold Reports Embedded Reporting Tools?**

We recommend you to refer how to enable permission to [allow-access-protected-folders](https://help.boldreports.com/embedded-reporting/faq/access-protected-folders/#controlled-folder-access-and-the-protected-file-usage).

## ​**Even though you     have allowed permission for blocking apps, still not able to launch the     Embedded Reporting Tools Sample Browser?**

We recommend you to ensure the below folders present in the
installation path `C:\Program Files (x86)\Bold Reports\Embedded Reporting Tools` and `C:\Users\Public\Documents\Bold Reports\Embedded Reporting
Tools\Samples.`​

​![embedded-reporting-tools-installation.4766128.de7f3d678aa86876dbf02b05795d5638.png](https://support.boldreports.com/kb/attachment/article/745/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzMzIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Qez93l2X5_WwM0pcExojAD9UbhgZryDxf0RVJlDELS8)

![embedded-reporting-tools-samples.a0b5e64.7fdc386912f0da53f224c26edcfeca19.png](https://support.boldreports.com/kb/attachment/article/745/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzMzMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Y2sMNlomhBQuUAI5bXY6K0NYFmtCJWRV7vqhfwv3OpA)  

## **Even though you haveallowed permission for blocking apps, still not able to launch the EmbeddedReporting Tools Sample Browser?**

We recommend you to
ensure the below folders present in the installation path C:\Program Files (x86)\Bold Reports\Embedded Reporting Tools and C:\Users\Public\Documents\Bold
Reports\Embedded Reporting Tools\Samples.

| Platform | Arguments |
| --- | --- |
| JavaScript | StartSampleBrowserReportingTools.exe "JAVASCRIPT" |
| Angular | StartSampleBrowserReportingTools.exe "ANGULAR" |
| ASP.NET | StartSampleBrowserReportingTools.exe "ASPNET" |
| ASP.NET MVC | StartSampleBrowserReportingTools.exe "ASPNETMVC" |
| ASP.NET Core | StartSampleBrowserReportingTools.exe "ASPNETCORE" |

After running the above command, ensure the
System tray contains `IISEXPRESS.exe` application which hosts the samples.
![iis-express.1c05dfa.5407767f7efbb31d66c03154b758fed4.png](https://support.boldreports.com/kb/attachment/article/745/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzMzQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Xg-_dQSCApeVEHv_YBZiysqpVCU0wBE9ZroBOcUgs5M)

![iis-hosted.aaa9e5c.bb2871a50593bb7a9dddac206065ac40.png](https://support.boldreports.com/kb/attachment/article/745/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzMzYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.WibHue8tNiv0B5eLaoS-x6B1OUx80EShzomdgeqAee4)

## If none of the above steps doesn't help to launch the Samples?
You can able to find the error log file in the
path `C:\Program
Files (x86)\Bold Reports\Embedded Reporting
Tools\Utilities\StartSampleBrowserReportingTools`, kindly [contact us](https://www.boldreports.com/contact) by creating a support ticket and share the generated
log file with us, we will reach you soon.

# Where can i find the installation error and debug log files

You can find the error log files for Embedded Reporting Tools installation failures in the following location.

- `C:\Program Files (x86)\Bold Reports\Embedded Reporting Tools\Infrastructure\Install Log`
- C:\Program Files (x86)\Bold Reports\Embedded Reporting Tools\Utilities\InstallInfoGenerator

# How to customize parameter setting by parameter name

Use the `beforeParameterAdd` event for this customization. You can refer the following code sample for customizing the parameter setting by `StartDate` and `EndDate` parameter name.

    <div id="viewer"></div>
    <script>
        $("#viewer").boldReportViewer({
                  beforeParameterAdd: "onBeforeParameterAdd"
            });
    </script>
    </html>

          <bold-report-viewer id="viewer" report-service-url="/api/ReportViewer" report-path="product-line-sales.rdl" before-parameter-add="beforeParameterAdd"> </bold-report-viewer>
           <script type="text/javascript">
           function beforeParameterAdd(args) {
               if (args.parameterModel.Name === "StartDate") {
                   args.parameterSettings.minDateTime = new Date("4/5/2003 5:00:00 AM");
                   args.parameterSettings.maxDateTime = new Date("4/15/2003 5:00:00 AM");
                }
                if (args.parameterModel.Name === "EndDate") {
                   args.parameterSettings.minDateTime = new Date("5/10/2003 5:00:00 AM");
                   args.parameterSettings.maxDateTime = new Date("5/20/2003 5:00:00 AM");
                }
            }
    </script>

### See also

[How to add the Null parameter with DatePicker for DateTime parameter?](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/how-to/add-null-value-with-datetime-drop-down/)

[How to group the values in parameter drop down?](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/how-to/group-the-values-in-parameter-drop-down/)

[How to customize the boolean parameter UI with parameter pane?](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/how-to/customize-the-boolean-parameter/)

# How to change the UI of a date parameter to DateTime parameter

You have to make use of the custom properties for the report to change the UI of the date parameter to DateTime parameter. Follow these steps, to change the UI of the date parameter to DateTime parameter.

1. Open the report in our Bold Report Designer.
2. Open the report properties and click the custom attributes to set the custom properties for the report.![custom-attributes.123bfe0.7318672e779b0cc731b0f7fc0690b8bc.png](https://support.boldreports.com/kb/attachment/article/750/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzOTEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.itjxTm0WDQhOxn-obodpccXzEKFSZT9_htwLHasJU50)
3. Add custom properties to the report for the parameter with value of `DateTime` as shown in the following image:![datetime-custom-property.6428e8f.f69d36d4c11cdcc736011b319ed17d53.png](https://support.boldreports.com/kb/attachment/article/750/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzOTIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.awANDrDqQ72uFLO4x4I1RfxK-G_xHmKh4Wd_B8jEsSQ)

    The name of the property to change the UI of date parameter to DateTime parameter should be in `SfParam_<parameter_Name>_DateTimePickerType` format.
The date parameter UI will be changed to the DateTime UI based on the value that is specified in the property as shown in following image. ![parameter-datetime-preview.63ff18d.67bd91c362a334ab9f6845eea7a7ca3e.png](https://support.boldreports.com/kb/attachment/article/750/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzOTMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9._6gUvzI2TViLcdLz8rynU5rLo5OUvpruP3xnYaSxB9E) ﻿﻿

# How to change the parameter data type

Use the parameter edit option in Bold Report Designer to change the Report parameter data type exciting one to required one. Follow these steps, to change parameter data type. In Bold Reports, supported data types are Boolean, DateTime, Integer, Float, and String.

1. Open the report in our Bold Report Designer.
2. Open the Parameter pane and click the Parameter edit option.![parameter-edit-option.79e067c.12f9d079587c72157f69c3af86f65282.png](https://support.boldreports.com/kb/attachment/article/751/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQzOTYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Ai4MA9bTikUIB6eFO4aIwboIWEu9dVZD1vb-W20KKT8)
3. Change the Report parameter data type and save the parameter.

![change-parameter-data-type.0fb6506.79177c08123a6941fd430cb4f4c757a9 (1).png](https://support.boldreports.com/kb/attachment/article/751/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0MjUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.YRIHnzfNBxoLixCssBgwrNaROl6j654e4elVgoqBW0Y)

# How to change the width of the available value parameter

You have to make use of the custom properties for the report to change the width of the available value parameter. Follow these steps, to change the width of the available value parameter.

1. Open the report in our Bold Report Designer.
2. Open the report properties and click the custom attributes to set the custom properties for the report.

    ![custom-attributes.123bfe0.7318672e779b0cc731b0f7fc0690b8bc (1).png](https://support.boldreports.com/kb/attachment/article/752/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0MzEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.NcpOrxAjIMflpxEZorfgtDDQDAE37d9pNoh6Gp80sr4)
3. Add custom properties to the report for the parameter as shown in the following images:

    To change the width of available value parameter, add the custom property to the report as shown in following image.   
![parameter-width-custom-property.b21028e.2a67c242be0aafc5676ca971b6b26377.png](https://support.boldreports.com/kb/attachment/article/752/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0MzIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.XJ5PpDG6ia2b16bJszH4c_5k2myk610eoKL-Dz4XE00)   
The name of the property to change the available value parameter width should be in `SfParam_<<Parameter Name>>_ItemWidth` format.

    The width of the available value parameter will be changed to the width value that is specified in the property as shown in following image.   
![parameter-width.892e785.3917777917ee90d14f299a44abc22d68.png](https://support.boldreports.com/kb/attachment/article/752/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0MzMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.c2Qb1e6ldD0r4GSnT7hoptacrvKJwVl6ulkPFcLXUBc)

# How to customize the parameter label based on another parameter value

You have to make use of the custom code and the `SfExp` for the parameter label to get the parameter label changed based on another parameter value. Follow these steps, to change the label of parameter based on another parameter value.

1. Open the report in our Bold Report Designer.
2. Open the report properties and click `Code` to add the custom code to get the parameter label, as shown in the following image.![parameter-custom-code.34c5d92.8d23e50571e556e00643f03722683269.png](https://support.boldreports.com/kb/attachment/article/753/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0MzQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.OM3SblVTWWKeC26I5OUZxJI3edr_m6I3iiXFm_-t_MM)
3. While creating the parameter, use the custom code function and assign it to the `SfExp` to manually set a label of the parameter based on the previous parameter value as shown in the following image.![parameter-label-expression.4028bbc.0b59362fbcfa0afaf3d0609728978f50.png](https://support.boldreports.com/kb/attachment/article/753/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0MzUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9._q_Sa_Ve3RLapWzNMqRHnNZNQ3L8QNnY9eAc_pZk5K8)

While previewing the report, the parameter label will be as shown in the following image:  
![preview-state.c878a26.c9121d282c703c1874231497717a9403.png](https://support.boldreports.com/kb/attachment/article/753/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0MzYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.6nlX-B6Pt2tjLShI2-NeIKYG7zjVkCMxtTspHU0NMqw)

In this section, we have provided the steps to modify the parameter label based on another parameter value. Similarly, you can also modify the parameter label for various other scenarios like changing the culture of the parameter label or selecting dataset fields as parameter labels using the `SfExp` feature.

## See also

[Add report parameter to the report](https://help.boldreports.com/standalone-report-designer/designer-guide/report-parameters/add/)

# How to get distinct values in parameter dropdown

This section explains how to get distinct values and display in a SSRS parameter dropdown when data set query returns duplicates.

### Steps to configure distinct values for parameters

The data set query might have duplicate records. At report run time, these values will be listed in parameter drop down as it is.

![parameters-with-duplicate-values.a389abb.480a0c5acd567810ea4f5cbe5798537e.png](https://support.boldreports.com/kb/attachment/article/754/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0MzkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.TD3HqiYu05zrMYxpGJx2Qi4PCj4IoYdcTJbFqFkaB9g)

Bold Reports designer provides an option called `Show unique values` when creating a parameter. User can enable this option to get distinct values in parameter dropdown.

1. [Create a new parameter](https://help.boldreports.com/standalone-report-designer/designer-guide/report-parameters/add/) or [edit an existing parameter](https://help.boldreports.com/standalone-report-designer/designer-guide/report-parameters/edit/).
2. In parameters configuration panel, enable the `Show unique values` checkbox.   
![enable-unique-value.12d3ba2.218bd17e64fe6cdac340c0ca70aaf170.png](https://support.boldreports.com/kb/attachment/article/754/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0NDAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.FYYI9LeuT0mbM0XXYXRiipRTRF1gAbjP4JYm1VL8fhs)
3. Save the parameter.

When the report runs, the unique values will be listed in parameter dropdown

![parameters-with-unique-values.c98a7a4.0530bf83bac4bc104c6cf91438a3d8a0.png](https://support.boldreports.com/kb/attachment/article/754/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0NDEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.gRqgzs2G5hLpLOwAtRvRKqT1eA0sX5BXSGnhYpj4PgY)

# How to pass the login user as parameter to Stored Procedure

Use the `=User.UserID` expression to pass the login user as parameter for a stored procedure. Find the following steps to pass the login user value to stored procedure parameter for getting the data from database based on user.

1. Create a dataset using the stored procedure, which having a UserID as parameter from `Dataset` dialog box.
2. Select the dataset from `Data` panel and click the highlighted icon to open context menu with list of options. Select `Parameters...` option in the menu to open `Parameters` dialog box as shown in the following image.   
![select-parameters.cb0f43d.1c50620d2047a2ae72e74c5715c92ffc.png](https://support.boldreports.com/kb/attachment/article/755/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0NDQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.-dsIfgRs-y539-p1hgKrlUkFvJh5wRthzVIpV174uOE)
3. Now, click the highlighted square icon of `UserId` parameter to open context menu with two options and select `Expression...` to open `Expression` dialog box as shown in the following image.   
![expression.0a793ba.f2fe188e9ad997a0792ece34761f67b5.png](https://support.boldreports.com/kb/attachment/article/755/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0NDUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.SAK7E9DiQYBaHeq3FRodqLLGpXAr1PbmoNwYGwn_Cdo)
4. Then, select `User` option under `Built-in-Fields` from the highlighted `Options` combo box as shown in the following image.   
![user-id.49ab861.622398e8325d04ec6051b8954e19763d.png](https://support.boldreports.com/kb/attachment/article/755/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0NDYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.DwNw20zzIeqH-LcbSGhSTWyMv3ufv2kzSOdbGz38cLU)
5. Select `UserID` and double click it to set `UserID` value as shown in the following image.   
![set-user-id.1699d9e.77b3f7921888c8d56790f13152c2875c.png](https://support.boldreports.com/kb/attachment/article/755/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0NDciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.uOVYguKjtK4lcUs1ttv70_Jv9N3rOFIxktpYcwwHBjY)

# How to programmatically query a list of parameters in a report

ReportSerializer helper and RDL models are available in Bold Reports library to find the reports' elements information. Please find the following steps to get the report in the C# object model by using the Report Serializer and querying the list of parameters information from ReportDefinition.

    FileStream fileStream = new FileStream( reportFolderPath + "\Resources\sales.rdl", FileMode.Open, FileAccess.Read);
    
    MemoryStream reportStream = new MemoryStream();
    fileStream.CopyTo(reportStream);
    reportStream.Position = 0;
    fileStream.Close();
    
    BoldReports.RDL.DOM.ReportSerializer reportSerializer = new BoldReports.RDL.DOM.ReportSerializer();
    
    // Method to get the reports with ReportDefinition object model
    var reportDefintion = reportSerializer.GetReportDefinition(reportStream);
    
    BoldReports.RDL.DOM.ReportSerializer reportSerializer = new BoldReports.RDL.DOM.ReportSerializer();
    var dataset = reportSerializer.GetSharedDataSet(readStream);
    var reportDefintion = reportSerializer.GetReportDefinition(readStream);
    
    // Property to get the parameters information from report.
    var reportParameters = reportDefinition.ReportParameters;

# How to resolve #error issue on rendering the report with multiple parameters

`Allow multiple values` option is enabled in parameters and if a single value is passed to the parameters, you will get `#Error` issue on rendering the report with multiple parameters.

You can resolve this issue by adding the following expression for the parameters. `=Join(Parameters!{Parametername}.Value,",")`

### See also

[Multiple value parameter](https://help.boldreports.com/standalone-report-designer/designer-guide/report-parameters/create-multi-value-parameter/)

# How to set the parameter in Web API Controller

Use the `OnReportLoaded` method to set parameter default value in the Web API controller.

    [NonAction]
    public void OnReportLoaded(ReportViewerOptions reportOption)
    {
        List<BoldReports.Web.ReportParameter> userParameters = new List<BoldReports.Web.ReportParameter>();
        userParameters.Add(new BoldReports.Web.ReportParameter()
        {
            Name = "SalesOrderNumber",
            Values = new List<string>() { "SO50756" }
        });
        reportOption.ReportModel.Parameters = userParameters;
    }

You can find the following help documentation for how to set the parameter at client side in various platforms.

- [Angular](https://help.boldreports.com/embedded-reporting/angular-reporting/report-viewer/report-parameters/#set-parameter-at-client-side)
- [React](https://help.boldreports.com/embedded-reporting/react-reporting/report-viewer/report-parameters/#set-parameter-at-client-side)
- [Java Script](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/report-parameters/#set-parameter-at-client)
- [ASP.NET Core](https://help.boldreports.com/embedded-reporting/aspnet-core-reporting/report-viewer/report-parameters/#set-a-parameter-with-razor-view)
- [ASP.NET MVC](https://help.boldreports.com/embedded-reporting/aspnet-mvc-reporting/report-viewer/report-parameters/#set-parameter-at-client)
- [ASP.NET Webforms](https://help.boldreports.com/embedded-reporting/aspnet-web-forms-reporting/report-viewer/report-parameters/#set-parameter-at-client)

# How to select all the available values in the parameter list as default in the report

Please follow these steps for selecting all available values in the parameter as default in the report.

1. Click on assign values and choose the Default Value with `Query Value`. The selection of the dataset and the value field should be same as the Available Value data set and value field query value.   
![set-default-values.f428568.9a51f520563b9f4c5b0417e994b173dd.png](https://support.boldreports.com/kb/attachment/article/760/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0NTkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.tqW12_bs-ebT6b92ZL2_7obe6Lg3eBLOMXWSdedBz_Y)
2. Now, save the parameter and preview the report. As a default, the report renders with all available values in the parameter list.   
![parameter-default-values-output.938b961.009ea6a1daf2b97b83e9fef67523a46e.png](https://support.boldreports.com/kb/attachment/article/760/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0NjAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.aeZKNeoOA_p3O7HwoZ5Vpx5ego15HaqORJfrWbs8-Fg)

# Is it possible to showing the selected all text instead of showing all values from a parameter

Yes, you can able to show the **Selected All** text instead of showing all values from parameter when we choose the select all option in Parameter using expression. You can find the below expression for achieving this.

     =iif(Parameters!<ParameterName>.Count == Count(Fields!<FieldName>.Value,"<DatasetName>"),"Selected All",Join(Parameters!<ParameterName>.value,","))

# Does Bold Report Viewer use SSRS Report processing

Bold Report Viewer can load reports from SSRS, but it does not use SSRS report processing for rendering of reports. The Bold Report Viewer will get only the definitions from SSRS such as reports, data sources and datasets. The data processing will happen in the application server that serves as the backend for the Bold Report Viewer. A connection is made to the data source using resource details retrieved from the SSRS Report Server and the connection string, query details used in the report. You can see the processing flow of a report loading in Bold Report Viewer from SSRS in the following image.

![ssrs-reporting.440f06b.20dcd365b710ee46380b1b12714ef0a9.png](https://support.boldreports.com/kb/attachment/article/762/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0NjEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.LhCrZeUMZIaIwjCVLIB11_dMhx53509xyWZlSQMlU3o)

### See also

[How to provide the permission for user to access the SSRS Report Server reports?](https://help.boldreports.com/embedded-reporting/faq/ssrs-enable-permission/)

# How to provide the permission for user to access the SSRS Report Server reports

The user what we are using for the **ReportServerCredential** that should have permission to get the report, datasource , resources from server. So, we make sure we are having the content manager permission available for the folder from where are going to get the reports and the user has the permission to access the Report Server.

### Site Setting of Report Server

Within the SSRS website, the first item to setup is to create system level permissions; these permissions are assigned to the main administrators of SSRS and the "power" users who publish reports. Two main roles, System Administrator and System User are predefined. Assignment to these roles is made by clicking on Site Setting in the upper right corner of the report server site; next click on the Security link from the left menu.

![site-setting-image.c09d7f9.7ac62827886b977691425d9104a2446e.png](https://support.boldreports.com/kb/attachment/article/763/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0NjIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.AyMqHTUuXUbG_sKU-Ct6KtaIBXz81g1qo8gU-FOpPso)

### Permission of user

Clicking on the Edit option allows you to add, edit, or remove the roles assigned to the user or group as displayed in the below figure. The System Administrator role is reserved for those who need to have full control over the Report Server whereas the System User role is applied to users / groups who are power users of the Report Server.

![user-permission.4149eb1.6fd49da156497b56cef0ced4f04556e2.png](https://support.boldreports.com/kb/attachment/article/763/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0NjMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.wdrb3FqpIuwoBb1Uwq0vyv-n_kwUsPIRU0gNpdHumqs)

### Folder

Click on the Manage Folder button upper right corner of the Report Server.

![folder-permission.7bb6046.83dc8f41bb46f2bc9ceeed8352c97581.png](https://support.boldreports.com/kb/attachment/article/763/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0NjQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.m2j2k9eGWVb5ZIoEYLAieqmqci3097jNM_zneh8nFho)

### Permission for Folder

Provide the permission for the Group or users

![folder-permission2.3ea39ee.878fe26e4a4388b9cd8cedc2d971ea30.png](https://support.boldreports.com/kb/attachment/article/763/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0NjUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.sX4havgZc7wC3ft4922meyIgtmydPuG1w-0vGDHG37M)

### Permission of user with Folder

Provide the Role for the user

![folder-permission3.bd6740a.b0f5e6d45ea72fb214fab46a860bdc66.png](https://support.boldreports.com/kb/attachment/article/763/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0NjYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.qT398eJGQpdJ2Xh-j9UO-trvpdIesDoG-xcjo5E2e_0)

# What are all the SSRS versions are supported in Bold Reports

Bold Reports supports SSRS from SQL Server Reporting Services 2008. Find the list of SQL Server Reporting Services (SSRS) tested in Bold Reports.

- `SQL Server Reporting Services 2008`
- `SQL Server Reporting Services 2008 R2`
- `SQL Server Reporting Services 2012`
- `SQL Server Reporting Services 2014`
- `SQL Server Reporting Services 2016`
- `SQL Server Reporting Services 2017`
- `SQL Server Reporting Services 2019`

You will use the ASP.NET Core or ASP.NET MVC services for other platforms such as JavaScript, Angular, React, and UWP platforms. So, do not have separate support list for the other platforms.

# How to add Report Viewer in JSP

Use the Bold Reports [Javascript Report Viewer](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/display-ssrs-rdl-report-in-javascript-application/) for adding Report Viewer in the JSP application. You can find the sample from [here](https://www.syncfusion.com/downloads/support/directtrac/general/ze/WebApplication3-367126418.zip).

# Does Bold Reports Embedded Reporting Tools support .NET Core and Docker on Linux

Yes, Bold Reports Embedded Reporting Tools support .NET Core on Linux Docker. You have to ensure the following details while using our component with Docker environment.

We are using the `System.Drawing` to measure text size for `CanGrow` feature supports Textbox ReportItem and it requires native `libgdiplus` library, which does not contain in default `microsoft/dotnet` image. So, you must add native `libgdiplus` library with install command as follows in `DockerFile`.
### install System.Drawing native dependencies
    RUN apt-get update \
        && apt-get install -y --allow-unauthenticated \
            libc6-dev \
            libgdiplus \
            libx11-dev \
         && rm -rf /var/lib/apt/lists/*
The sample docker file can be downloaded from [here](https://www.syncfusion.com/downloads/support/directtrac/general/ze/Dockerfile691223173.zip).

# Can use Java Spring Framework for Bold Reports

Yes, you can use Bold Reports with Java Spring Framework applications. Bold Reports do not support directly by using our component with Java Spring Web application, you have to use our JavaScript jQuery component with Java Spring Web application. You can refer the following article how can use the Jquery with Java Spring Web application.

[How to use AJAX and jQuery in Spring Web MVC (.jsp) Application](https://crunchify.com/how-to-use-ajax-jquery-in-spring-web-mvc-jsp-example/)

[Report Viewer Getting Started with JavaScript](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/display-ssrs-rdl-report-in-javascript-application/)

# Can the Bold Reports be used with ASP.NET Core on Linux and macOS

Yes, you can make use of our Bold Reports Embedded Reporting tools with Linux and macOS. You have to ensure the following while using our component.

Bold Reports uses the **System.Drawing** to measure text size for **CanGrow** feature supports available Textbox ReportItem and it requires native libgdiplus library. So, you should install the libgdiplus dependent library, which is not available with non-Windows operating systems.

### Linux

Install the libgdiplus by executing the following commands at a terminal (command) prompt:

    sudo apt install libc6-dev
    sudo apt install libgdiplus

### macOS

Use the Homebrew ("brew") package manager for installing libgdiplus. After installing brew, install the libgdiplus by executing the following commands at a terminal (command) prompt:

    brew update
    brew install mono-libgdiplus

See Also

[.NET Core dependencies requirements on .NET ubuntu for System.Drawing.Common assembly](https://docs.microsoft.com/en-us/dotnet/core/install/linux-ubuntu#dependencies)

[.NET Core dependencies requirements on macOS for System.Drawing.Common assembly](https://docs.microsoft.com/en-us/dotnet/core/install/macos#libgdiplus)

[System.Drawing for .NET Core from NuGet packages](http://www.lib4dev.in/info/CoreCompat/CoreCompat/59116779)

# How to use the Bold Reports with ASP.NET Core 3.1

This is applicable only for for the Bold Reports version before **2.3.27**. Since, the latest version is not required this setting.

We are using `Json.NET serializer` for Report Service which has been removed from ASP.NET Core 3.1 shared framework. So, you have to use `AddNewtonsoftJson()` with services to works with `Json.NET serializer` as per the migration information from .NET Core 3.1

[Migrate from ASP.NET Core 2.2 to 3.1](https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.1&tabs=visual-studio#use-newtonsoftjson-in-an-aspnet-core-30-mvc-project)

- Add a package reference to Microsoft.AspNetCore.Mvc.NewtonsoftJson
- Update `Startup.ConfigureServices` to call AddNewtonsoftJson.

    public void ConfigureServices(IServiceCollection services)
    {
    …
    …
    services.AddNewtonsoftJson();
    }

# How to use the Bold Reports with ASP.NET Core 3.x

This is applicable only for for the Bold Reports version before **2.3.27**. Since, the latest version is not required this setting.

We are using `Json.NET serializer` for Report Service which has been removed from ASP.NET Core 3.0 shared framework. So, you have to use `AddNewtonsoftJson()` with services to works with `Json.NET serializer` as per the migration information from .NET Core 3.0

[Migrate from ASP.NET Core 2.2 to 3.0](https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.1&tabs=visual-studio#use-newtonsoftjson-in-an-aspnet-core-30-mvc-project)

- Add a package reference to Microsoft.AspNetCore.Mvc.NewtonsoftJson
- Update `Startup.ConfigureServices` to call AddNewtonsoftJson.

    public void ConfigureServices(IServiceCollection services)
    {
    …
    …
    services.AddNewtonsoftJson();
    }

# Is it possible to create a WPF .Net Core application with Bold Report Viewer

Yes, it is possible to create a WPF .Net Core application with Bold Report Viewer. For creating a WPF .Net Core application with Bold Report Viewer, you need to ensure that Visual Studio 2019 is installed in your machine.

Please follow these mentioned steps to create a WPF .Net Core application with Bold Report Viewer:

1. Open the Visual Studio 2019 and select **Create a new project**.
2. Go to **Installed &gt; Visual C# &gt; Windows Desktop**.
3. Select **WPF App (.NET Core)**, then click **NEXT**.
4. Change the application name, and then click **Create**.

    ![wpf-net-core-report-viewer.fe595a2.94b271cecde1dce05c41bc62db97d7c4.png](https://support.boldreports.com/kb/attachment/article/771/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0NzQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9._p2bPGx9TQzX8sewwprImqF-cEWmz6jreoiGcv707jk)
5. Visual Studio creates the project and opens the designer for the default application window named as `MainWindow.xaml`.

You can follow the remaining steps from the [Getting started](https://help.boldreports.com/embedded-reporting/wpf-reporting/report-viewer/display-ssrs-rdl-report-in-wpf-application/) section to complete the process of creating WPF .Net Core application with Bold Report Viewer.

# How to resolve the unsupported media type error on loading image in ASP.NET Core

Unsupported media type error occurs on the loading image in the Report Viewer and Report designer because of the `ApiController` attribute. This attribute will not allow for file byte content. You can resolve the error by following these steps.

1. Remove the `[ApiController]` attribute in your controller because it is not supported to get the image from API.
2. Then add the `[FromBody]` attribute with the PostReportAction action as shown below because we have removed the ApiController attribute from the controller.

    ![frombody-attribute.265bad8.4796ab4e82ee2c7cd982b2745041ac87.png](https://support.boldreports.com/kb/attachment/article/772/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0NzUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.MMBToX0_wEGDS7i-S9XVhiNcg77SGb9dTvRZ_-yB1E4)

### See also

[Display ssrs rdl report in Bold Reports ASP.NET Core Report Viewer](https://help.boldreports.com/embedded-reporting/aspnet-core-reporting/report-viewer/display-ssrs-rdl-report-in-asp-net-core-application/)

# How to add checkbox in table using image?

As per RDL standard, you cannot add checkbox in report. Alternatively, you can use a checkbox image in the report and modify its visibility using expression. This section describes simple steps to design a checkbox report using the Report Designer.

1. Select the tablix cell and insert Image item.  
![add-image.c878a26.9099f1d7104b8af7523a9eb55ff7211b.png](https://support.boldreports.com/kb/attachment/article/774/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0NzciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.ZRtKQov3w89CrrW5msGXwglwyo7OK3VGpLWLi1KDtCg)
2. Add the checkbox image to the report using the image manager.  
![add-check-box-image.29f3330.782b641b15df8b50c566bf90c72c36b5.png](https://support.boldreports.com/kb/attachment/article/774/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0NzgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Uu8vVnC2_V9-frNpVwDOhw7vbIqtS6wmfp1QNppWn7w)
3. <font color="#283a5f"><span style="color: rgb(40, 58, 95); font-family: Caros, sans-serif; font-size: 16px; font-style: normal; font-weight: 400; text-align: left; text-indent: 0px; white-space: normal; background-color: rgb(255, 255, 255); display: inline !important; float: none;">Now, select table cell that contains the image item and set the image value of the checkbox image with the properties in the property panel.<span> <br><img src="https://support.boldreports.com/kb/attachment/article/774/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0ODAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.vmRNibMDhY2CtM_VvAvkDMqGLOwVVPgq_XOoAYP8cHc" class="e-rte-image e-imginline" alt="set-check-box-image-value.24e8813.163e47f8b8be40bc8a6c92057563ec84.png" width="auto" height="auto" style="min-width: 0px; max-width: 769px; min-height: 0px;" data-name="set-check-box-image-value.24e8813.163e47f8b8be40bc8a6c92057563ec84.png" data-size="19 KB" loading="lazy"> <br></span></span></font>
4. <font color="#283a5f"><span style="color: rgb(40, 58, 95); font-family: Caros, sans-serif; font-size: 16px; font-style: normal; font-weight: 400; text-align: left; text-indent: 0px; white-space: normal; background-color: rgb(255, 255, 255); display: inline !important; float: none;">Set the visibility of the image item with the dataset field value using the visibility property.<br><img src="https://support.boldreports.com/kb/attachment/article/774/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0ODEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.t6eBoctfMcogbWDPQyKJYMRszTkPgkwvl8AIGWeZF1A" class="e-rte-image e-imginline" alt="set-visibility-for-image.4cf50cd.5a3e0736be899ff259a2e20948b10cef.png" width="auto" height="auto" style="min-width: 0px; max-width: 769px; min-height: 0px;" data-name="set-visibility-for-image.4cf50cd.5a3e0736be899ff259a2e20948b10cef.png" data-size="11 KB" loading="lazy"><br> <img src="https://support.boldreports.com/kb/attachment/article/774/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0ODIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.xO9cBpc-j1cQpiVxu4euMQjHUiaeXijaGqjEmzZHgGA" class="e-rte-image e-imginline" alt="visibility-expression.00168e8.94b1e3bfdc60eae8ec5caf6219b63864.png" width="auto" height="auto" style="min-width: 0px; max-width: 769px; min-height: 0px;" data-name="visibility-expression.00168e8.94b1e3bfdc60eae8ec5caf6219b63864.png" data-size="14 KB" loading="lazy"> <br></span></font>
5. <font color="#283a5f"><span style="color: rgb(40, 58, 95); font-family: Caros, sans-serif; font-size: 16px; font-style: normal; font-weight: 400; text-align: left; text-indent: 0px; white-space: normal; background-color: rgb(255, 255, 255); display: inline !important; float: none;">Now, the report preview can be visualized as follows.<br></span><img src="https://support.boldreports.com/kb/attachment/article/774/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0ODMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.YmE_5_Z3iJ-wlzUymfnLtELtRqUhmEzODTKRXwwAKPY" class="e-rte-image e-imginline e-img-focus" alt="preview-report.2e505b9.65502b1b15242f92d8079d71bab51604.png" width="auto" height="auto" style="min-width: 0px; max-width: 769px; min-height: 0px;" data-name="preview-report.2e505b9.65502b1b15242f92d8079d71bab51604.png" data-size="14 KB" loading="lazy"> <br></font>

# How to add Check box in Table Report?

You have to add check box in reports using the `Symbols` fonts. As per RDL standard, you cannot add check box in report. Alternatively, you can use `symbols` fonts to add check box in report. This section describes simple steps to design a check box report using the Standalone Report Designer.

1. Select the tablix cell to add check box.  
![select-check-box-field.cd072e5.ca31411346d6f53a8a96f4cad2e8d891.png](https://support.boldreports.com/kb/attachment/article/775/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0ODUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.NHN1_DUvE8-crmrDpsSwnRTnAntJKWGawoQK8POiY1Y)
2. Open the `PROPERTIES` pane. Choose fonts style as `Wingdings`.  
![choose-font.fb8a13b.75252a643c4814a5a95f503ad4ff27c4.png](https://support.boldreports.com/kb/attachment/article/775/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0ODYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.oxM29eg8dZXhAQu-26-nDNT3Ormiu4QwS593jSzTVvU)
3. Now, select table cell and set expression to the check box report `=IIF(Fields!OrderQty.Value>5,Chr(254),"o")`. IIF function `Chr(254)` enables the check box.  
![set-expression.473b6d1.d1f7972420d9a123cf672e4b391266bd.png](https://support.boldreports.com/kb/attachment/article/775/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0ODciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.WTq7Kkzf7gjPUXn8_kd33iQqLFYnqqUEZd8GvldBb5U)
4. Now, the report preview can be visualized as follows.  
![preview-check-box-report.175c05c.fb138d010d95cb0cf1bcb1d9828cf77c.png](https://support.boldreports.com/kb/attachment/article/775/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0ODgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.E-F2oun5YKtRFyt_MjtVkmp8W4EgicIBmirFNhq2xHo)   
The `Wingdings`font is not supported in Mozilla fire fox and Opera. Hence, you need to use check box as image item in your report for which you can refer [How to add Check box in table using image?](https://help.boldreports.com/standalone-report-designer/how-to/add-check-box-in-table-report-using-image-item/)

# How to add interactive sorting for tablix and matrix header in the report?

Find the following steps for adding the interactive sorting for tablix or matrix report item header

1. Open the report in the report designer and right-click the text box in the column header that you want to add an **interactive sort** button, and then click **Text Box Properties**.  
![interactive-sorting-1.ec69a09.c27d4233ecd6f346f5167a3fbb0a63b5.png](https://support.boldreports.com/kb/attachment/article/776/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0ODkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.hOdAPnH1yq2PYdd7E87Q1mf5dF_sBrpbfZRtgkzSEL4)
2. Click **User sort** as shown in the following image.  
![interactive-sorting-2.29c8c7b.a8df62c61e946362a8c59984e2904309.png](https://support.boldreports.com/kb/attachment/article/776/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0OTAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.l2zDoP5O5ktLTv-7jG6XRb4J0Y3iQgtkHizzaO8k85Y)
3. Provide the expressions in **sort expression** as shown in the following image.  
![interactive-sorting-3.578a6fa.62766228417f0b744be758efbbb1d3fd.png](https://support.boldreports.com/kb/attachment/article/776/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0OTEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.1LXqA5MD3eNGSoXxGjm38X7Gqxi5ROLiCQhA0Tk4FZc)   
You can repeat this action for multiple textboxes of the tablix or matrix headers

# How to create master detail report using a list in Report Designer?

In some scenarios, your data source contains master-detail relationship and you prefer to create a single report to show the mater-detail result.

To achieve this, create a query that combines multiple tables and returns a single data set containing both master and detail records.

Let us look at the procedures to create a list report item with a detail group that displays the master-detail relationship.

1. As a first step, open the Bold Report Designer.  
![bold-reports-designer.b3c7ef1.d111060e70d3509cfdfbd2c8268d34b5.png](https://support.boldreports.com/kb/attachment/article/777/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0OTIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Ve8kZUfwjV1hX52PVZYYvOg1F8WBGEouNesFC8P3Xfw)
2. Connect to the data source using this documentation [link](https://help.boldreports.com/enterprise-reporting/designer-guide/report-designer/manage-data/datasource/).
3. Connect to the dataset using this documentation [link](https://help.boldreports.com/enterprise-reporting/designer-guide/report-designer/manage-data/dataset/).
4. The `ProductCatalog` dataset is created using the following query.  
![datasource-connection.2ddf5f8.bf0cee0975431fb64d7f2cae30eedc91.gif](https://support.boldreports.com/kb/attachment/article/777/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0OTMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.32iQuS1umxaLcuzcp2DWLNQNNgdGs1cOlKXvD9SjCKo)

        ```csharp
          SELECT top 60 PS.Name AS ProdSubCat, PM.Name AS ProdModel, PC.Name AS ProdCat, PD.Description, PP.LargePhoto,P.Name AS ProdName,P.ProductNumber, P.Color, P.Size, P.Weight, P.StandardCost,P.Style,P.Class, P.ListPrice
          FROM  Production.Product P INNER JOIN
          Production.ProductSubcategory PS INNER JOIN
          Production.ProductCategory PC ON PS.ProductCategoryID = PC.ProductCategoryID ON P.ProductSubcategoryID = PS.ProductSubcategoryID INNER JOIN
          Production.ProductProductPhoto PPP ON P.ProductID = PPP.ProductID INNER JOIN
          Production.ProductPhoto PP ON PPP.ProductPhotoID = PP.ProductPhotoID LEFT OUTER JOIN
          Production.ProductDescription PD INNER JOIN
          Production.ProductModel PM INNER JOIN
          Production.ProductModelProductDescriptionCulture PMPDCL ON PM.ProductModelID = PMPDCL.ProductModelID ON
          PD.ProductDescriptionID = PMPDCL.ProductDescriptionID ON P.ProductModelID = PM.ProductModelID
        WHERE (PMPDCL.CultureID = 'en')
        ```
5. Drag the table report item and configure the field as shown in the following image.  
![list-detail-table.d9077a0.33eec617c9e4fcabd5596cd6aea90d85.png](https://support.boldreports.com/kb/attachment/article/777/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0OTQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.jx_TzP3YTAp352nus1O7uz9yWp-jjeYf5VXVgWiuuzE)
6. Drag the list report item and set the dataset name to the `Dataset` property in the properties panel.  
![assign-dataset-list.c9e37ea.572e7bd8693455e0ae958eb39781aa71.png](https://support.boldreports.com/kb/attachment/article/777/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0OTUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.gS1mj1mbM-8XTokQ7b_JiEWvUxibQjdJm4u2efs_t80)
7. Add groups to the list to display the data as shown in the following image.  
![initial-list-design.d32d7b9.b5cfbf6ec8aa6acdd03bcd7ab7a53490.png](https://support.boldreports.com/kb/attachment/article/777/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0OTYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.SoEraJPmJjLCHK69oD7IFsIocapVoUiaHRX1gZuZDDE)
8. Cut the detail table from body and paste inside the list as shown in the following image.  
![final-list-design.9199f83.cababbb21630f69c9090a69998be0d8b.png](https://support.boldreports.com/kb/attachment/article/777/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0OTciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.yZW-2DWBlpmf0obDBL-hZtvhjY_f42lbVi_wUzdRAPM)
9. Click on the Preview at the top-right corner of the Report Designer toolbar to see the output result.  
![output-list.9199f83.ae1f41ca41ddbd62deda5a886e2794a1.png](https://support.boldreports.com/kb/attachment/article/777/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0OTgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Pgr6tqEyms5iuB8MBhaTTg5S_-kE5di9bPf8mQCIIJ4)

# How to design the report with encrypted data on Bold Reports?

You can design the report with encrypted data by using the code module. You can learn more details about the code module from the following link.

[Code Module](https://help.boldreports.com/standalone-report-designer/designer-guide/compose-report/code-module/)

# How to do automatic resizing of Textbox based on their content?

Use the `Can Grow` and `Can Shrink` properties with Textbox report items. This will grow and shrink Textbox height vertically based on their content.  
![can-grow-property.d565fee.9fe71a0273ae24bf82ef2ccbe1d1af13.png](https://support.boldreports.com/kb/attachment/article/780/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0OTkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.guj8WO7G4YPdVJeQUsBkll69EVOrfUNX73Iqbuked1E)

# How to find the specific field element is available in the report?

`ReportSerializer` helper and RDL models with Bold reports library are used to find the specific field information in the report.

For example, the following code is used to find the **Quarter** text available in the report.

    private void InspectReport(string reportPath)
    {
        FileStream fileStream = new FileStream(reportPath, FileMode.Open, FileAccess.Read);
        MemoryStream reportStream = new MemoryStream();
        fileStream.CopyTo(reportStream);
        reportStream.Position = 0;
        fileStream.Close();
        BoldReports.RDL.DOM.ReportSerializer serializer = new BoldReports.RDL.DOM.ReportSerializer();
        var reportDefinition = serializer.GetReportDefinition(reportStream);
        // Property to get the report items information from report body.
        BoldReports.RDL.DOM.ReportItems bodyReportItems = null;
    
        if (reportDefinition.Body == null)
        {
           bodyReportItems = reportDefinition.ReportSections[0].Body.ReportItems;
        }
        else
        {
           bodyReportItems = reportDefinition.Body.ReportItems;
        }
    
        this.SearchItems(bodyReportItems);
    }
    
    private void SearchItems(BoldReports.RDL.DOM.ReportItems items)
    {
        foreach (var reportItem in items)
        {
            this.SearchItem(reportItem);
        }
    }
    
    private void SearchItem(BoldReports.RDL.DOM.ReportItem reportItem)
    {
        if (reportItem is BoldReports.RDL.DOM.Rectangle)
        {
            this.SearchItems((reportItem as BoldReports.RDL.DOM.Rectangle).ReportItems);
        }
        else if (reportItem is BoldReports.RDL.DOM.Tablix)
        {
            this.SearchItemInTablix(reportItem as BoldReports.RDL.DOM.Tablix);
        }
        else if (reportItem is BoldReports.RDL.DOM.TextBox)
        {
            var run = (reportItem as BoldReports.RDL.DOM.TextBox).Paragraphs.First().TextRuns.First();
    
            if (run.Value == "Quarter")
            {
                // here you can write your code.
            }
        }
    }

    private void SearchItemInTablix(BoldReports.RDL.DOM.Tablix tablix)
    {
        if (tablix.TablixColumnHierarchy != null && tablix.TablixColumnHierarchy.TablixMembers != null)
        {
            foreach (var tablixMember in tablix.TablixColumnHierarchy.TablixMembers)
            {
                this.SearchItemInTablixGroupItems(tablixMember);
            }
        }
    
        if (tablix.TablixRowHierarchy != null && tablix.TablixRowHierarchy.TablixMembers != null)
        {
            foreach (var tablixMember in tablix.TablixRowHierarchy.TablixMembers)
            {
                this.SearchItemInTablixGroupItems(tablixMember);
            }
        }
    
        if (tablix.TablixBody != null && tablix.TablixBody.TablixRows != null)
        {
            foreach (var tablixRow in tablix.TablixBody.TablixRows)
            {
                foreach (var cell in tablixRow.TablixCells)
                {
                    this.SearchItemInCellContents(cell.CellContents);
                }
            }
        }
    
        if (tablix.TablixCorner != null && tablix.TablixCorner.TablixCornerRows != null)
        {
            for (int i = 0; i < tablix.TablixCorner.TablixCornerRows.Count; i++)
            {
                BoldReports.RDL.DOM.TablixCornerCells cells = tablix.TablixCorner.TablixCornerRows[i].TablixCornerCells;
    
                for (int j = 0; j < cells.Count; j++)
                {
                    this.SearchItemInCellContents(cells[j].CellContents);
                }
            }
        }
    }
    
    private void SearchItemInTablixGroupItems(BoldReports.RDL.DOM.TablixMember tablixMember)
    {
        if (tablixMember != null)
        {
            return;
        }
    
        if (tablixMember.TablixHeader != null && tablixMember.TablixHeader.CellContents != null
            && tablixMember.TablixHeader.CellContents.ReportItem != null)
        {
            this.SearchItemInCellContents(tablixMember.TablixHeader.CellContents);
        }
    
        if (tablixMember.TablixMembers == null && tablixMember.TablixMembers.Count >= 0)
        {
            foreach (var tm in tablixMember.TablixMembers)
            {
                this.SearchItemInTablixGroupItems(tm);
            }
        }
    }
    
    private void SearchItemInCellContents(BoldReports.RDL.DOM.CellContents CellContents)
    {
        if (CellContents != null && CellContents.ReportItem != null)
        {
            this.SearchItem(CellContents.ReportItem);
        }
    }

# How to hide columns in Table ReportItem using the report parameters?

You can hide the columns of Table ReportItem by setting the visibility property of the particular column with the report parameter value. You need to follow these steps to hide the column in Table ReportItem
1. Open the report in your Bold Report Designer.
2. Add a boolean parameter to the report to change the visibility of the column of the Table ReportItem based on the parameter values.
3. Select the Table ReportItem and enable the advanced items in the Grouping panel as shown in the following image,  
![grouping-panel-enable-advanced.7201738.0c9c1fc6bfda1c4ca8eef170e3710db0 (1).png](https://support.boldreports.com/kb/attachment/article/782/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1NTgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.gDxMWMEewCErucOosjfBwHGKNwsRsIFFHm6WtAhBJ_U)
4. Select the required `Static` column for which the visibility needs to be changed based on the parameter value as shown in the following image.  
![select-static-column.11fab90.efeac8f99560c4c43ff61498e6b4e306 (1).png](https://support.boldreports.com/kb/attachment/article/782/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1NTkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.wzkwWU49kzoJbXm8iYtUd2F2pHTAEgZtO1x_IgGO1Yc)
5. Open the property panel and drill through the visibility property to open the expression window as shown in the following image,  
![column-visibility.c878a26.125ba4bae50cd234e739cc8af0100d5f (1).png](https://support.boldreports.com/kb/attachment/article/782/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1NjAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.2vn2Xk5jrb4Ur84AGJ4_pUQALNSAF588xp_Z6Xs97r0)
6. Set the expression for the visibility of the column with the parameter value as shown in the following image,  
![column-visibility-expression.c47cf78.5b58456409dc3b13e23a0b977843450f (1).png](https://support.boldreports.com/kb/attachment/article/782/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1NjEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.4WXuBLRrnR1RQEmLgA48vRQymfCPeUnZ_d3COB77VII)
7. Now, the visibility of the column of the table will be changed based on the parameter value as shown in the following images,  
When the parameter value is true:  
![Report with column](https://www.boldreports.com/faq/assets/static/report-with-column.c878a26.e8e1d964e3a75ebc697c683661c57a1e.png)   
When the parameter value is false:  
![Report without column](https://www.boldreports.com/faq/assets/static/report-without-column.c878a26.1086a218c012dfd6e3f820190586fb31.png)
If you hide the column of Table ReportItem using the column selection, then the column content will only get hidden and not the column itself, as shown in the following image,      
![Report without column content](https://www.boldreports.com/faq/assets/static/report-without-column-content.c878a26.ee4c29ce2891df39789747bd3a62666a.png)

###  See Also

[Add report parameter to the report](https://help.boldreports.com/standalone-report-designer/designer-guide/report-parameters/add/)

# How to hide the table column or row when the field value is empty?

This section explains how to hide a table column or row when the field value is empty using expression.

### How to hide the table column when the field value is empty

1. Drag and drop the table, then select the dataset and assign the filed values.  
![hide-row-column-table-design.d8bc14f.48d320334dc6f545241a2c7ed170e228.png](https://support.boldreports.com/kb/attachment/article/783/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MTUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.rhwZUJ5LMJ4iLwibv5ha8sGdZI1SzDJ-CLwi_bsfzFI)
2. Select the row and click `visibility` under the properties panel.  
![hide-column-expression.cf61dc5.f3b8f62e154aa3676ef9ce8bbc218af7.png](https://support.boldreports.com/kb/attachment/article/783/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MTciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.bjWlQ06fPCtT7yXfmOnaS8pJGRLMoTMAb8b-qo_Pzwg)
3. You can hide the empty column in the table based on the column visibility expression as follows.

         =IIF(Sum(IIF(Nothing(Fields!FirstName.Value),1,0)) = COUNT(Fields!FirstName.Value) ,FALSE,TRUE)
4. Click `Preview` at the top-right corner of the Report Designer toolbar to see the output result.  
![hide-column-output.d8bc14f.e84c15d60298e10f93c836e022e40bf8.png](https://support.boldreports.com/kb/attachment/article/783/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MTkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.QmrYqWgyW7iFqtL-S_jtBI4w5c98t6lIbIZ8AgSzpxw)

### How to hide the table row when the field value is empty

1. Drag and drop the table, then select the dataset and assign the filed values.  
 ![hide-row-column-table-design.d8bc14f.48d320334dc6f545241a2c7ed170e228 (1).png](https://support.boldreports.com/kb/attachment/article/783/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MjEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.2__ubdOWEKUCdopL50L44OVPMzHoeuCcZfUYVDB_WZk)
2. Select the row and click `visibility` under the properties panel.  
![hide-row-expression.cf61dc5.e72177978c8687773d21bb6bb78801e2.png](https://support.boldreports.com/kb/attachment/article/783/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MjMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.a9GjKop-nzzWjSCvPYN-O4kcB_q0cbmsUSJxla9RGMg)
3. You can hide the empty column in the table based on the column visibility expression as follows.

         =IIF(Nothing(Fields!FirstName.Value) ,FALSE,TRUE)
4. Click `Preview` at the top-right corner of the Report Designer toolbar to see the output result.  
![hide-row-output.d8bc14f.5f1287fa68455f6c731a7c9e5212d24e.png](https://support.boldreports.com/kb/attachment/article/783/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MjUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.X-UUVX5tPg0lQ1w3RruyJZx4j8i5CxvKy_tgvYE0FDE)

# How to create master detail report using subreport in Report Designer?

This documentation explains the step-by-step procedure to create master-detail report that displays the detail records from a sub-report.

## Create and customize the detail report

1. As a first step, open the Bold Report Designer.   
![bold-reports-designer.b3c7ef1.d111060e70d3509cfdfbd2c8268d34b5.png](https://support.boldreports.com/kb/attachment/article/784/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MDkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.IJFvIw1LVd5Ro50wzKIkPdmiIZ-lGED6QEMPwh9DmtY)
2. To add parameters to the detail report, click `Parameters`. Then, click `New parameter` in the parameter panel.
3. Now, the following wizard will be displayed.   
![parameter-wizard.31a36f0.9537b193b1c5a034b2c0b3855af8ce21.png](https://support.boldreports.com/kb/attachment/article/784/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MTAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.vO3RySGFmiSU0ysyHkvB2bdPxnlwDnyoTc6urFPFOnM)
4. Specify the parameter name as `ProdSubCat`, the prompt as `ProdSubCat` and set visibility to `hidden`.
5. Then, click `Save`.
6. Similarly, do the same to add the parameter `ProdModel`.

    ![sub-report-add-parameter.bd6740a.aebd6bc4296ae1a2652eb1fd4c1306b8.gif](https://support.boldreports.com/kb/attachment/article/784/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MTEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.PnOAgz-_1dJaWjMRtcYUW2zAKPr6N5M-t6LyAESVbv0)
7. Connect to the data source using this documentation [link](https://help.boldreports.com/enterprise-reporting/designer-guide/report-designer/manage-data/datasource/).
8. Connect to the dataset using this documentation [link](https://help.boldreports.com/enterprise-reporting/designer-guide/report-designer/manage-data/dataset/).
9. The `ProductCatalog` dataset is created using the following query.   
![datasource-connection.2ddf5f8.bf0cee0975431fb64d7f2cae30eedc91.gif](https://support.boldreports.com/kb/attachment/article/784/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MTIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.FuXMKG3xSCMjd2-1xuG9tVWyGnFvmz7AU21urAhyPXs)

          SELECT top 60 PS.Name AS ProdSubCat, PM.Name AS ProdModel, PC.Name AS ProdCat, PD.Description, PP.LargePhoto,P.Name AS ProdName,P.ProductNumber, P.Color, P.Size, P.Weight, P.StandardCost,P.Style,P.Class, P.ListPrice
          FROM  Production.Product P INNER JOIN
          Production.ProductSubcategory PS INNER JOIN
          Production.ProductCategory PC ON PS.ProductCategoryID = PC.ProductCategoryID ON P.ProductSubcategoryID = PS.ProductSubcategoryID INNER JOIN
          Production.ProductProductPhoto PPP ON P.ProductID = PPP.ProductID INNER JOIN
          Production.ProductPhoto PP ON PPP.ProductPhotoID = PP.ProductPhotoID LEFT OUTER JOIN
          Production.ProductDescription PD INNER JOIN
          Production.ProductModel PM INNER JOIN
          Production.ProductModelProductDescriptionCulture PMPDCL ON PM.ProductModelID = PMPDCL.ProductModelID ON
          PD.ProductDescriptionID = PMPDCL.ProductDescriptionID ON P.ProductModelID = PM.ProductModelID
        WHERE (PMPDCL.CultureID = 'en') and PS.Name = @ProdSubCat and PM.Name = @ProdModel
10. Drag the table report item and configure the field as shown in the following image.  
![initial-detail-report-design.775f9c8.50b7d5db809bfbe4a6714ca756f2a79a.png](https://support.boldreports.com/kb/attachment/article/784/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MTQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Ny50j6k6JkJtw64w4cGmYqpB5LsAJF7NNBlqr-mRE24)

You can download the created Detail report from here, [Sample report.](https://www.syncfusion.com/downloads/support/directtrac/general/ze/Detail-report1732874929.zip)

### Create a master report

1. Open the Bold Report Designer.   
![bold-reports-designer.b3c7ef1.d111060e70d3509cfdfbd2c8268d34b5 (1).png](https://support.boldreports.com/kb/attachment/article/784/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MTYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9._J3KBosLO2GUCMtS7mxpzLZLXd5itUYjlEamugwO9g4)
2. Connect to the data source using this documentation [link](https://help.boldreports.com/standalone-report-designer/designer-guide/manage-data/datasource/).
3. Connect to the dataset using this documentation [link](https://help.boldreports.com/standalone-report-designer/designer-guide/manage-data/dataset/).
4. The `ProductCatalog` dataset is created using the following query.  
![datasource-connection.2ddf5f8.bf0cee0975431fb64d7f2cae30eedc91 (1).gif](https://support.boldreports.com/kb/attachment/article/784/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MTgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.ZwcBScVhUkwxVR10U4YhdIUTmWIqYuHxOfqA78Qcutk)

        ```csharp
          SELECT top 60 PS.Name AS ProdSubCat, PM.Name AS ProdModel, PC.Name AS ProdCat, PD.Description, PP.LargePhoto,P.Name AS ProdName,P.ProductNumber, P.Color, P.Size, P.Weight, P.StandardCost,P.Style,P.Class, P.ListPrice
          FROM  Production.Product P INNER JOIN
          Production.ProductSubcategory PS INNER JOIN
          Production.ProductCategory PC ON PS.ProductCategoryID = PC.ProductCategoryID ON P.ProductSubcategoryID = PS.ProductSubcategoryID INNER JOIN
          Production.ProductProductPhoto PPP ON P.ProductID = PPP.ProductID INNER JOIN
          Production.ProductPhoto PP ON PPP.ProductPhotoID = PP.ProductPhotoID LEFT OUTER JOIN
          Production.ProductDescription PD INNER JOIN
          Production.ProductModel PM INNER JOIN
          Production.ProductModelProductDescriptionCulture PMPDCL ON PM.ProductModelID = PMPDCL.ProductModelID ON
          PD.ProductDescriptionID = PMPDCL.ProductDescriptionID ON P.ProductModelID = PM.ProductModelID
        WHERE (PMPDCL.CultureID = 'en')
        ```
5. Drag the table report item and configure the fields. Then, add groups in the tablix to display the data using this documentation [link](https://help.boldreports.com/standalone-report-designer/designer-guide/report-items/tablix/add-or-delete-a-details-group-ssrs/).
6. The initial design of the report is displayed as shown in the following image.  
![initial-master-report-design.b3c7ef1.98a05b7200a76429da17653a79ff1132.png](https://support.boldreports.com/kb/attachment/article/784/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MjAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.SPgYwRc98icX9rhO5lvdlpcirPQiaHWWm9HP9IyLe34)

You can download the previously created master report from here. [Sample master report.](https://www.syncfusion.com/downloads/support/directtrac/general/ze/Master-report804288141.zip)

### Link the subreport to the master report

The following steps explain how to link sub-report (`product category detail records`) to a master report.

1. Right-click on the last row (`Description`) and select `Insert Row`, then click the `Inside Group-Below option`.
2. In the newly added row, select all the cells using `Ctrl Key + Mouse left click` combination.
3. After selection, right-click any selected cell, and then click `Merge Cells`.
4. Right click on newly added row and select Insert, then click Subreport.  
![add-sub-report-in-master.775f9c8.47a507379d64f1d54185a87c48a15b79.gif](https://support.boldreports.com/kb/attachment/article/784/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MjIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.A4g687MpwmC-X9phGr8MEU1SWiu7SMZ-JNN0C9dOFVw)
5. Select the sub-report item in the design surface and open the `properties panel`.
6. Under the Basic Settings, copy the sub-report path and paste it in the Report field.  
![link-sub-report-path.11f2004.0ab2143b5866064fb8fb3d5457472512.gif](https://support.boldreports.com/kb/attachment/article/784/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MjQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Q0Wsgo36LVO50m6HTdpzPtI44twGkNCHDlQzgP6WM-E)
7. Then Click `Set Parameters`, followed by the `Add` button.
8. Specify the Parameter Name to `ProdSubCat` and value to `=Fields!ProdSubCat.Value`.
9. Similarly, do the same for parameter `ProdModel` and value as `=Fields!ProdModel.Value`.  
![add-parameter-in-master.bd6740a.0925dd138b1cec75aa0f16a471322ccb.gif](https://support.boldreports.com/kb/attachment/article/784/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MjYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.qYi1DPb_8-6Ei12y_vNNgsJV5rAsj3rjM6B9mDymuiY)
10. Click on the Preview at the top-right corner of the Report Designer toolbar to see the output result.   
![output-video.11f2004.fa360ac479f92614735b4840d63723aa.gif](https://support.boldreports.com/kb/attachment/article/784/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MDgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.QlQr7c9p1XJH3kRWheI_LVstyEYm_KbXP1OkZrX_XPA)

# How to manage reports within application using Bold Reports Report Designer?

You can use **ExternalServer** to manage the reports with in application. Find the following code for accessing the existing reports, datasources and datasets from application **App\_Data** folder.

    public override List<CatalogItem> GetItems(string folderName, ItemTypeEnum type)
            {
                List<CatalogItem> _items = new List<CatalogItem>();
                string targetFolder = HttpContext.Current.Server.MapPath("~/") + @"App_Data\ReportServer\";
    
                if (type == ItemTypeEnum.Folder || type == ItemTypeEnum.Report)
                {
                    targetFolder = targetFolder + @"Report\";
                    if (!(string.IsNullOrEmpty(folderName) || folderName.Trim() == "/"))
                    {
                        targetFolder = targetFolder + folderName;
                    }
                }
    
                if (type == ItemTypeEnum.DataSet)
                {
                    foreach (var file in Directory.GetFiles(targetFolder + "DataSet"))
                    {
                        CatalogItem catalogItem = new CatalogItem();
                        catalogItem.Name = Path.GetFileNameWithoutExtension(file);
                        catalogItem.Type = ItemTypeEnum.DataSet;
                        catalogItem.Id = Regex.Replace(catalogItem.Name, @"[^0-9a-zA-Z]+", "_");
                        _items.Add(catalogItem);
                    }
                }
                else if (type == ItemTypeEnum.DataSource)
                {
                    foreach (var file in Directory.GetFiles(targetFolder + "DataSource"))
                    {
                        CatalogItem catalogItem = new CatalogItem();
                        catalogItem.Name = Path.GetFileNameWithoutExtension(file);
                        catalogItem.Type = ItemTypeEnum.DataSource;
                        catalogItem.Id = Regex.Replace(catalogItem.Name, @"[^0-9a-zA-Z]+", "_");
                        _items.Add(catalogItem);
                    }
                }
                else if (type == ItemTypeEnum.Folder)
                {
                    foreach (var file in Directory.GetDirectories(targetFolder))
                    {
                        CatalogItem catalogItem = new CatalogItem();
                        catalogItem.Name = Path.GetFileNameWithoutExtension(file);
                        catalogItem.Type = ItemTypeEnum.Folder;
                        catalogItem.Id = Regex.Replace(catalogItem.Name, @"[^0-9a-zA-Z]+", "_");
                        _items.Add(catalogItem);
                    }
                }
                else if (type == ItemTypeEnum.Report)
                {
                    foreach (var file in Directory.GetFiles(targetFolder, "*.rdl"))
                    {
                        CatalogItem catalogItem = new CatalogItem();
                        catalogItem.Name = Path.GetFileNameWithoutExtension(file);
                        catalogItem.Type = ItemTypeEnum.Report;
                        catalogItem.Id = Regex.Replace(catalogItem.Name, @"[^0-9a-zA-Z]+", "_");
                        _items.Add(catalogItem);
                    }
                }
    
                return _items;
            }

You can refer the below application for using the ExternalServer [ExternalServer Sample](https://www.syncfusion.com/downloads/support/directtrac/general/ze/ReportDesignerSample-927570781.zip)

# How to create a master detail report using the table in Report Designer?

In some scenarios, your data source contains master-detail relationship and you prefer to create a single report to show the mater-detail result.

To achieve this, create a query that combines multiple tables and returns a single data set containing both master and detail records.

Let us look at the procedures to create a tablix report item with a row and detail group that displays the master-detail relationship.

1. As a first step, open the Bold Report Designer.  
![bold-reports-designer.b3c7ef1.d111060e70d3509cfdfbd2c8268d34b5 (2).png](https://support.boldreports.com/kb/attachment/article/786/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MjciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.7NtlFiBA521Sq0dPuVCjEsLmjQYnCfXs03l0-XUXZKQ)
2. Connect to the data source using this documentation [link](https://help.boldreports.com/enterprise-reporting/designer-guide/report-designer/manage-data/datasource/).
3. Connect to the dataset using this documentation [link](https://help.boldreports.com/enterprise-reporting/designer-guide/report-designer/manage-data/dataset/).
4. The `ProductCatalog` dataset is created using the following query.   
![datasource-connection.2ddf5f8.bf0cee0975431fb64d7f2cae30eedc91 (2).gif](https://support.boldreports.com/kb/attachment/article/786/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MjgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.b24KgG8yFMy6cLpjxjXx-UVwzBxtSePdz5GCJABFfl0)

        ```csharp
          SELECT top 60 PS.Name AS ProdSubCat, PM.Name AS ProdModel, PC.Name AS ProdCat, PD.Description, PP.LargePhoto,P.Name AS ProdName,P.ProductNumber, P.Color, P.Size, P.Weight, P.StandardCost,P.Style,P.Class, P.ListPrice
          FROM  Production.Product P INNER JOIN
          Production.ProductSubcategory PS INNER JOIN
          Production.ProductCategory PC ON PS.ProductCategoryID = PC.ProductCategoryID ON P.ProductSubcategoryID = PS.ProductSubcategoryID INNER JOIN
          Production.ProductProductPhoto PPP ON P.ProductID = PPP.ProductID INNER JOIN
          Production.ProductPhoto PP ON PPP.ProductPhotoID = PP.ProductPhotoID LEFT OUTER JOIN
          Production.ProductDescription PD INNER JOIN
          Production.ProductModel PM INNER JOIN
          Production.ProductModelProductDescriptionCulture PMPDCL ON PM.ProductModelID = PMPDCL.ProductModelID ON
          PD.ProductDescriptionID = PMPDCL.ProductDescriptionID ON P.ProductModelID = PM.ProductModelID
        WHERE (PMPDCL.CultureID = 'en')
        ```
5. Drag the table report item and configure the fields. Then, add groups in the tablix to display the data using this documentation [link](https://help.boldreports.com/enterprise-reporting/designer-guide/report-designer/report-items/tablix/add-or-delete-a-details-group-ssrs/).  
![initial-master-report-design.b3c7ef1.98a05b7200a76429da17653a79ff1132 (1).png](https://support.boldreports.com/kb/attachment/article/786/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MjkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.a4kuVcXel8WUJprTTzmYaAo-8wMGGe0JzzgBPgfzUus)
6. Drag the another table report item and configure the field as shown in the following image.  
![initial-master-detail-table.b81fcc2.0821260b82b0a136394694a202ba9443.png](https://support.boldreports.com/kb/attachment/article/786/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MzAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.xOC2S_OdDj-eLsWrEP6oxSn4Ftm30eIfybfMUU_E2tQ)

    You can download the previously created report from here( [Initial master-detail table design.](https://www.syncfusion.com/downloads/support/directtrac/general/ze/Product-catalog-836330880.zip))
7. Right-click on the last row (`Description`) and select `Insert Row`, then click the `Inside Group-Below option`.
8. In the newly added row, select all the cells using `Ctrl Key + Mouse left click` combination.
9. After selection, right-click any selected cell, and then click `Merge Cells`.
10. Cut the detail table from body and paste inside the merged row.  
![insert-detail-record.11f2004.3c75dacfcbb76a9c553dd4d196cca1e0.gif](https://support.boldreports.com/kb/attachment/article/786/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MzEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.GcIsEnoRhZ_l_gs5Gr7kVrapojry8uLTXxQ5QOa9KaQ)
11. Click on the Preview at the top-right corner of the Report Designer toolbar to see the output result.  
![output-video.11f2004.fa360ac479f92614735b4840d63723aa (1).gif](https://support.boldreports.com/kb/attachment/article/786/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MzIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.An2t_SNsT509YPEz7cdY2OedzQLbj9BdJp2xeLdvpi0)

# How to create a report with excel datasource?

You can create a report in Bold Report Designer with Excel data source using the ODBC data source. You need to follow these steps to create the Excel data source:

### Create a new Excel Data source in ODBC

1. Open the ODBC data source administrator and click Add to create a new data source as shown in the following image.

    ![administrator.c5933eb.b07867efc01ebce164a4cfb6ee522222.png](https://support.boldreports.com/kb/attachment/article/787/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MzMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.fHqDrbeRoZhRkbm8cG0vF9X81xjW2U1lBzxZjVDj4M4)
2. Select `Driver do Microsoft Excel(*.xls)` to create new Excel data source as shown in the following image.

    ![excel.179003c.e3bfa09e49ea405c65aecedb1c387c5e.png](https://support.boldreports.com/kb/attachment/article/787/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MzQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Bb22BLt7AQwxKHyrWNpSaZo3IVQ1nQJeyDP000aLY1s)
3. Provide the data source name and workbook location and click `OK` button to add new Excel datasource as shown in the following image.

    ![excel-database.8a17a48.ebe29151f1eca81e2ca69acf930bd25a.png](https://support.boldreports.com/kb/attachment/article/787/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1MzUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.wcIQvUkfloHNUjkWRnId5qYNMSiwKkwqeTLCh-PhJ5s)

### Create a report with Excel data source using ODBC

1. Open the Report Designer application.
2. Open the data source panel as shown like in the following image.

    ![Data Source Panel](https://www.boldreports.com/faq/assets/static/datasource-panel.67d4054.8c848cfedf4e74674811e00cf284f662.png)
3. Click `New Data`.
4. Click `ODBC` connection as shown in the following image.

    ![Data Source Select Panel](https://www.boldreports.com/faq/assets/static/select-panel.f4b86f7.0df5dec83c3715c3a6dec682f0397bb9.png)
5. Provide the datasource connection information as shown in the following image.

    ![ODBC datasource connection settings](https://www.boldreports.com/faq/assets/static/excel-datasource.0fb6506.fe7b387d9eba2367e03aeb727d29e346.png)
6. Click `Connect`.
7. The Query designer will get opened where you need to provide the Query to select the data from Excel data source as shown in the following image.

    ![Query Designer](https://www.boldreports.com/faq/assets/static/query-designer-excel.eeaa33d.a9bff93ff689d3b3997203ba293f1c6f.png)
8. Click `Finish` to add the ODBC data source with Excel as data to the report.

# How to create the Cover Page for a Report in Bold Reports?

In Bold Reports, you can create a cover page for your report using a **rectangle** report item with a **page break** property. Incorporating a cover page enhances the quality of presentation and documentation of your report, making it more visually appealing and professional. Follow the steps below to create a cover page for your report:

###### Create the cover page using Rectangle
1. Begin by dragging and dropping the **rectangle** report item from the item panel onto the design area. Inside this rectangle item, you can create your **customized cover page**.
 
     ![image.png](https://support.boldreports.com/kb/attachment/article/788/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ2MDY2Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.g3yzLWj37fcpwls0DwUh3uUGIk6y-7KwnyfiUzzNt8c)

2. To ensure the cover page is displayed as a separate page, add a **page break** for the rectangle report item. Additionally, enable the **Page Number Reset** option, which will reset the page numbering for the subsequent pages of the report.
 
      ![image.png](https://support.boldreports.com/kb/attachment/article/788/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ2MDY3Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.oenPDZReFmhKIYKeZnZmtVuAFH8hVDNGAJye06jS_e4)

3.  In the report properties, navigate to the **Footer section**. Uncheck the **Print on First Page** option to prevent the footer from appearing on the cover page while ensuring it prints on all other pages for a clean and professional appearance.

      ![image.png](https://support.boldreports.com/kb/attachment/article/788/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ0ODMxIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.zfUZ7R4fJxY9U8FhO0wbSL6wGUw4rT19TiL5O5AQl1o)

4.  After completing the design of your cover page within the rectangle report item, proceed to design the rest of your report with the necessary details.
 
     ![image.png](https://support.boldreports.com/kb/attachment/article/788/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ2MDY4Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.XVyAZf8K750mRZJyHKfufq_DMOMBhV-7Ufv-Nqgid1E)

5. Once your report is ready, you can preview it to see how the cover page and subsequent pages are visualized.
 
      ![image.png](https://support.boldreports.com/kb/attachment/article/788/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ2MDc5Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.-rO_9WIuE1hOK2mT2Hj5HdSGh0KuM-XYsh8V8cygPWQ)

      ![image.png](https://support.boldreports.com/kb/attachment/article/788/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ2MDgxIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.yFBU3rlrfWYB_oip80yBPox0-TAHHJpq0npnQvTllFk)

Download the above report design below
 @(Embed){Cover Page Report.rdl}(https://support.boldreports.com/kb/attachment/article/788/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgzNjQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.vRGRK8NESwQcqdx-YIZQo6WPbdAx30YB8s92bwO9NCM).

# How to repeat the headers with group in a table?

Organizing data into logical groups is essential for creating reports that are easy to read and analyze. Bold Reports Designer provides powerful grouping features that allow you to add headers and footers to table data regions, making your reports more structured and visually appealing. This article explains how to achieve grouping in Tablix. By following these steps, you can enhance the clarity and usability of your reports for better data presentation.

1. Drag and drop the Table report item from the item panel into the design area and assign the dataset to the table data region.
![image.png](https://support.boldreports.com/kb/attachment/article/789/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU0NzY5Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.2HmR1OBbLAMulB9MVXoD9V9wCM_h7RJuU5uwnqBliLA)

2. Click on the table surface to enable the Grouping Panel in the design view.
![image.png](https://support.boldreports.com/kb/attachment/article/789/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU0NzcwIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.saJPZFmAlPJhzetlOl6NmPltRN1ZCzs-AKV7QgAu28g)

3. Go to Row Groups pane in the grouping panel and open the context menu on the Details group field.
![image.png](https://support.boldreports.com/kb/attachment/article/789/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU0NzcyIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.mkF8_42y_OZIANLa3C5QwGr0Djyawy-a4lVaG_KDVHM)

4. From the context menu, click on the Parent Group... option under the Add Group category.
![image.png](https://support.boldreports.com/kb/attachment/article/789/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU0NzczIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.QcbbIh0WtAKaYaIlePfc03wb2XmvU1mLJpM5zSRKFIM)

5. Once you click on the Parent Group option, a Table Group dialog will be opened to configure the grouping.
![image.png](https://support.boldreports.com/kb/attachment/article/789/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU0Nzc1Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.6H4BfIxwNnuhz0eMx4nXl3mOxNrmW3sK1hQ_SETqgbw)
 
 :::Info
* **Group By**: Based on the dataset assigned to the table region, dataset fields will be listed in this drop-down or else click on the square icon to create an expression.
* **Add Group Header**: Enable this option to add a header to this group
 :::

6. Choose the dataset field in the Group by drop-down list.

7. Select Add header to add a header row to the group and select Add footer to add a footer row to the group. And then click on the OK button.

Add header - Adds a static row above the group.
![image.png](https://support.boldreports.com/kb/attachment/article/789/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU0ODM0Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.7RD1HjTrzbP-cM3T-9PWwBMT41MvVHGzFclTrAvnvvE)

Now, a static row will be added above of the group in the table data region.
![image.png](https://support.boldreports.com/kb/attachment/article/789/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU0ODM1Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.5e2lVqjduYKRCPGVLl8o74tAjRjncmtyw7fZhRpqyR8)On report preview, the header will be added for each group as shown below.
![image.png](https://support.boldreports.com/kb/attachment/article/789/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU0Nzg1Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.GQSvLjFLIYJttfZM57Ys8BWnRIXfzXVAQdzRq0502EQ)

### Format header and footer
You can display the group value in the group header of the table data region.

### Merge header cells
1. Select the header cells and right-click in the cell. Then, click on the Merge Cells option.
![image.png](https://support.boldreports.com/kb/attachment/article/789/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU0ODM2Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.7heOHJ_cXJSwySGndbIBaQ66T46qII8ZwgbtcD8Lwc8)
2. Now, you can set group content and format the header cell as required using the properties provided in the property panel.
![image.png](https://support.boldreports.com/kb/attachment/article/789/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU0ODM5Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.zgjVXjxkHtiOZ01y6A8_KpQkgQnKTwvaVNpkqH1AnkY)
### Repeat header cells
1. Click on the surface of a table design to enable the grouping panel.
![image.png](https://support.boldreports.com/kb/attachment/article/789/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU0ODQwIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.iLhC-OatlClC6FhR8OoIg3yRl4meRAjuqva6JsrbA6M)

2. Refer to the Advanced Mode section to enable the advanced mode in grouping panel.
3. Once you click on the Advanced Mode, it will show the static columns in both row and column groups. Now, select the static column presented in the row group pane (Header Row Group).
![image.png](https://support.boldreports.com/kb/attachment/article/789/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU0ODQyIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.SuCN2uR6DE_s8-vJT6gFj2W1nWAhSnIYJg4gXGOo31c)

4. In the properties panel, enable the RepeatOnNewPage property checkbox and set the KeepWithGroup as After.
![image.png](https://support.boldreports.com/kb/attachment/article/789/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU0ODQzIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.wz4OZ9PDeYYB2PGW9rSkDD2kdcq-Yi3PW8ftBIqv3hk)

### Report preview
On the report preview, the header will be added for each group as shown in the following image and the header will repeat in a new page if the group values exceed the existing page.
![image.png](https://support.boldreports.com/kb/attachment/article/789/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU0ODQ1Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.kkMxnEgDgp9Ig2sR86l2i1C3BCcPZcA9DoZ2j-2Zj-M)

[Table Custom Properties](https://help.boldreports.com/embedded-reporting/angular-reporting/report-viewer/custom-properties/table/)


# How to use Matrix item instead of using the Classic Syncfusion Report Platform PivotGrid item?

Replaced the Syncfusion Report Platform PivotGrid ReportItem with our brand new Matrix ReportItem in our Bold Report Designer. The Matrix ReportItem has additional unique features as follows:

1. Row and column grouping
2. Total support for row and column groups
3. Filter and sort expressions support for groups
4. Cell customization support
5. Cell merging support
6. Support to insert other ReportItems
7. Visual clues to indicate row and column groups

## Alternative action in Matrix ReportItem instead of PivotGrid ReportItem

### Data assign

#### PivotGrid ReportItem

The PivotGrid ReportItem uses the data assign panel, by which the fields need to be added as shown in the following image.  
![PivotGrid Data Assign](https://www.boldreports.com/faq/assets/static/pivot-data-assign.6b0a70f.ec4f13bc364b449a7bf74d02e7720d38.png)

#### Matrix ReportItem

The Matrix ReportItem is provided with the Matrix Data Assign menu, which helps to assign the fields to the particular cell more precisely.  
![Matrix Data Assign](https://www.boldreports.com/faq/assets/static/matrix-data-assign.42db587.cc9a7962c2df54bb0636a26ee53aabc8.png)

### Adding a column

#### PivotGrid ReportItem

By dragging the dataset fields in the data assign panel, new columns will be added in the PivotGrid ReportItem as shown in the following image.

![PivotGrid Column](https://www.boldreports.com/faq/assets/static/pivot-column.cdc4e61.362557c8220daa450d88e41106e1219c.png)

#### Matrix ReportItem

Multiple columns can be added in the Matrix dynamically using the Matrix Context menu as shown in the following image.  
![Matrix Column](https://www.boldreports.com/faq/assets/static/matrix-column.2e505b9.39412ff2a0aeca43af19397a104f6ae0.png)

### Header

#### PivotGrid ReportItem

The PivotGrid ReportItem will be added with default header when dataset fields are assigned, which can be modified with the properties provided in the property panel.  
![PivotGrid Header](https://www.boldreports.com/faq/assets/static/pivot-header.4099a88.1db4f59d704773f77d2f1009902b9da7.png)

#### Matrix ReportItem

The Matrix ReportItem considers each cell as an individual and has the option to provide static values wherever required using the `Add Text` feature present in Matrix Data Assign menu.![Matrix Header](https://www.boldreports.com/faq/assets/static/matrix-header.c878a26.520812a31a464bf2a0a582456ef09918.png)   
If you need to create a header row in Matrix ReportItem, then you need to provide the static text values as mentioned above and click the whole row to modify it using the properties provided in the property panel.
![Matrix row](https://www.boldreports.com/faq/assets/static/matrix-header-with-static-values.c878a26.32064ff3a02df14bb6960b140a72af7c.png)

# How to use Table item instead of using the Classic Syncfusion Report Platform Grid item?

Replaced the Syncfusion Report Platform Grid ReportItem with our brand new table ReportItem in our Bold Report Designer. The table ReportItem has additional unique features as follows.

1. Row and column grouping
2. Total support for row and column groups
3. Filter and sort expressions support for groups
4. Cell customization support
5. Cell merging support
6. Support to insert other ReportItems
7. Visual clues to indicate row and column groups

## Alternative action in Table ReportItem instead of Grid ReportItem

### Data assign

#### Grid ReportItem

The grid ReportItem uses the data assign panel by which the fields need to be added as shown in the following image.  
![Grid Data Assign](https://www.boldreports.com/faq/assets/static/grid-data-assign.8be576a.247b9562ad19013a5e7a4ef0bd4ca485.png)

#### Table ReportItem

The table ReportItem is provided with the Table Data Assign menu, which helps to assign the fields to the particular cell more precisely.  
![Table Data Assign](https://www.boldreports.com/faq/assets/static/data-assign.fe6609d.1834e4baff00ec8b71568a257075e813.png)

### Adding column

#### Grid ReportItem

On drag and drop the dataset fields in the data assign panel, new columns will be added in the grid ReportItem as shown in the following image.  
![Grid Column](https://www.boldreports.com/faq/assets/static/grid-column.c878a26.aba1f5f0d0476ae636699a48e005d8af.png)

#### Table ReportItem

Multiple columns can be added in the table dynamically using the Table Context menu as shown in the following image.  
![Table Column](https://www.boldreports.com/faq/assets/static/table-column.c878a26.b81d69e989721924c5bcf053f83b3d6e.png)

### Header

#### Grid ReportItem

The grid ReportItem is provided with default header, which can be modified with the properties provided in the property panel.  
![Grid Header](https://www.boldreports.com/faq/assets/static/grid-header.b29ff09.9e28977ffad3d411e23f0fc71e3eab0d.png)

#### Table reportitem

The Table ReportItem considers each cell as an individual and has the option to provide static values wherever required using the `Add Text` feature present in Table Data Assign menu.  
![Table Header](https://www.boldreports.com/faq/assets/static/header.2e505b9.1e4d1f7e33a4d096647da98ba768977c.png)  
If you need to create a header row in table ReportItem, then you need to provide the static text values as mentioned above and click the whole row to modify it using the properties provided in the property panel.  
![Table row](https://www.boldreports.com/faq/assets/static/table-row.c878a26.6355abad44eb819c2a3201e488e06a2c.png)

### See also

[Basic of SSRS Table Data Region](https://www.boldreports.com/blog/basics-of-ssrs-tablix-data-region)

[Add Grouping and Totals in Table Data Regions](https://www.boldreports.com/blog/add-grouping-and-totals-in-tablix-data-regions)

# Is it possible to create the RDLC reports using the business object data source in Report Designer?

The Bold Report Designer does not have support to create the RDLC reports using the business object data source. In Bold Report Designer, RDLC reports can be created and the data can be assigned using the JSON array collection only. If you need to create RDLC report using the business object data source, then refer to this [RDLC report creation](https://help.boldreports.com/report-viewer-sdk/javascript-reporting/report-viewer/how-to/create-rdlc-report/) section.

# Enabling XML Data Source for Report Designer Control

If you are facing a problem while creating an XML data source for the Report Designer control, you can enable it by following a few simple steps. By default, the XML data source is unavailable in the Report Designer control, and you need to enable it with the control's properties.

Step 1: Install the BoldReports.Data.WebData, BoldReports.Data.Csv NuGet package.

To enable the XML data source, you need to install the BoldReports.Data.WebData and BoldReports.Data.Csv NuGet packages. You can install these packages from the NuGet Package Manager or run the following command in the Package Manager Console:
 
 ```csharp
Install-Package BoldReports.Data.WebData
Install-Package BoldReports.Data.Csv
 ```



Step 2: Register the extensions in the Report Settings.

After installing the required packages, you need to register the extensions in the Report Settings. You can do this by adding the following code in the startup:

 
 ```csharp
ReportConfig.DefaultSettings = new ReportSettings().RegisterExtensions(new List<string> { "BoldReports.Data.WebData", "BoldReports.Data.Csv" }); 
 ```


The above code will register the required extensions, enabling the XML data source for the Report Designer control.

# Enabling Image Rendering with Report Viewer on Linux and Other Non-Windows Platforms in .NET 5 and .NET 6

The Bold Reports Report Viewer component uses the `System.Drawing.Common` library to render images. However, in .NET 5 and .NET 6, the `System.Drawing.Common` library is only supported on Windows platforms. This means that the Report Viewer will not render images on non-Windows platforms, such as Linux, Mac, and Kubernetes.


To enable image rendering in the Report Viewer on non-Windows platforms, you can set the **System.Drawing.EnableUnixSupport** runtime configuration switch to **true** in the runtimeconfig.json file. To do this, follow these steps:


1. Add the runtimeconfig.template.json [file](https://support.boldreports.com/kb/attachment/article/12460/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijk2MjIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.An5SEOFzzvImZy3dwLKIM9zEe6me39dlmkD_O5ctdC0) to your application.

2. Add the following configuration properties to the runtimeconfig.template.json file.

```json
{
  "configProperties": {
    "System.Drawing.EnableUnixSupport": true
  }
}
```

![image.png](https://support.boldreports.com/kb/attachment/article/12460/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjUzNDIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.uYU5R68UyQ5X2paMCZdK-yC61c6igpdEno30D3os0CU)

By enabling the System.Drawing.EnableUnixSupport flag, and the Report Viewer will start rendering images on non-Windows platforms like Linux, Mac, and Kubernetes.


# How to Change the Data Source Dynamically using Report Serializer

Using the `ReportSerializer` class in Bold Reports, we can modify report details at runtime. This functionality allows you to dynamically customize the report's data source connection with different data sources.



 
 ```csharp
public void OnInitReportOptions(ReportViewerOptions reportOption)
{
    // Open the report file as a FileStream.
    FileStream inputStream = new FileStream(@"C:\Users\Resources\sales-order-detail.rdl", FileMode.Open, FileAccess.Read);

    // Create an instance of the ReportSerializer class.
    BoldReports.RDL.DOM.ReportSerializer serializer = new BoldReports.RDL.DOM.ReportSerializer();

    // Get the ReportDefinition from the report file using the serializer.
    BoldReports.RDL.DOM.ReportDefinition reportDefinition = serializer.GetReportDefinition(inputStream);

    // Define the connection string for the data source.
    string connectionString = "Data Source=dataplatformdemodata.syncfusion.com;Initial Catalog=AdventureWorks;User ID='demoreadonly@data-platform-demo';Password='N@c)=Y8s*1&dh'";

    // Iterate through each data source in the report definition.
    foreach (var source in reportDefinition.DataSources)
    {
        // Modify the connection string of each data source.
        source.ConnectionProperties.ConnectString = connectionString;
    }

    // Create a MemoryStream to save the modified report definition.
    MemoryStream reportStream = new MemoryStream();

    // Save the modified report definition to the MemoryStream using the serializer.
    serializer.SaveReportDefinition(reportStream, reportDefinition);

    // Reset the position of the MemoryStream.
    reportStream.Position = 0;

    // Set the modified report stream as the ReportModel's stream in the report options.
    reportOption.ReportModel.Stream = reportStream;
}

 ```

# Disabling Scrollbar in Bold Report Viewer Parameter Panel

By default, the Bold Report Viewer displays a scrollbar in the parameter panel when the panel contains multiple parameters. However, if you prefer to view the entire parameter panel without the scrollbar, you can disable it by setting the `enableparameterblockscroller` property to false.

```html
<div id="viewer"></div>
<script>
    $("#viewer").boldReportViewer(
        {
            enableParameterBlockScroller: false
        });
</script>
</html>
 ```
 
You can find the following help documentation for how to hide a parameter scroller on various platforms:

* [Angular](https://help.boldreports.com/embedded-reporting/angular-reporting/report-viewer/report-parameters/#hide-a-parameter-scroller)

* [React](https://help.boldreports.com/embedded-reporting/react-reporting/report-viewer/report-parameters/#hide-a-parameter-scroller)

* [Java Script](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/report-parameters/#hide-a-parameter-scroller)

* [Blazor](https://help.boldreports.com/embedded-reporting/blazor-reporting/report-viewer/report-parameters/#hide-a-parameter-scroller)

* [ASP.NET Core](https://help.boldreports.com/embedded-reporting/aspnet-core-reporting/report-viewer/report-parameters/#hide-a-parameter-scroller)

* [ASP.NET MVC](https://help.boldreports.com/embedded-reporting/aspnet-mvc-reporting/report-viewer/report-parameters/#hide-a-parameter-scroller)

* [ASP.NET Webforms](https://help.boldreports.com/embedded-reporting/aspnet-web-forms-reporting/report-viewer/report-parameters/#hide-a-parameter-scroller)


# How to Change the Query in a Report Dynamically

The ReportSerializer class in the Bold Reports is used for serializing and deserializing report definitions in the RDL (Report Definition Language) format. It provides a way to modify the report definition, including the query text, dynamically at runtime.

The ReportSerializer helper is available in our Bold Reports library to modify the report object.

## Report Viewer

To change the dataset query dynamically at runtime in the Report Viewer, the following code can be used:

``` csharp
    [NonAction]
    public void OnInitReportOptions(ReportViewerOptions reportOption)
    {
        // Get the base path of the web root.
        string basePath = _hostingEnvironment.WebRootPath;

        // Open the report file stream.
        FileStream reportStream = new FileStream(Path.Combine(basePath, "Resources", reportOption.ReportModel.ReportPath), FileMode.Open, FileAccess.Read);

        // Deserialize the report definition.
        ReportSerializer serializer = new ReportSerializer();
        ReportDefinition reportDefinition = serializer.GetReportDefinition(reportStream);

        // Modify the query text for each dataset.
        foreach (var dataSet in reportDefinition.DataSets)
        {
            dataSet.Query.CommandText = ""; // Update the query text here
        }

        // Set the modified report definition in the report model.
        reportOption.ReportModel.ReportDefinition = reportDefinition;
    }
```

## Report Writer

To change the dataset query dynamically at runtime in the Report Writer, the following code can be used:

``` csharp
     [HttpPost]
    public IActionResult Export(string writerFormat)
    {
        // Load the sample report file.
        FileStream inputStream = new FileStream(Path.Combine(_hostingEnvironment.WebRootPath, "Resources", "Test.rdl"), FileMode.Open, FileAccess.Read);
        
        // Create a ReportWriter instance.
        ReportWriter writer = new ReportWriter();

        string fileName = null;
        WriterFormat format;
        string type = null;

        // Deserialize the report definition.
        ReportSerializer serializer = new ReportSerializer();
        ReportDefinition reportDefinition = serializer.GetReportDefinition(inputStream);
        
        // Modify the query text for each dataset.
        foreach (var dataSet in reportDefinition.DataSets)
        {
            dataSet.Query.CommandText = ""; // Update the query text here.
        }

        // Determine the format and file name based on the writerFormat.
        if (writerFormat == "PDF")
        {
            fileName = "Test.pdf";
            type = "pdf";
            format = WriterFormat.PDF;
        }
        else if (writerFormat == "Word")
        {
            fileName = "Test.docx";
            type = "docx";
            format = WriterFormat.Word;
        }
        else if (writerFormat == "CSV")
        {
            fileName = "Test.csv";
            type = "csv";
            format = WriterFormat.CSV;
        }
        else
        {
            fileName = "Test.xlsx";
            type = "xlsx";
            format = WriterFormat.Excel;
        }

        // Load the report definition.
        writer.LoadReport(reportDefinition);

        // Create a memory stream to hold the exported report.
        MemoryStream memoryStream = new MemoryStream();
        
        // Save the report to the memory stream.
        writer.Save(memoryStream, format);

        // Set the memory stream position to the beginning.
        memoryStream.Position = 0;

        // Return the generated export document to the client side.
        FileStreamResult fileStreamResult = new FileStreamResult(memoryStream, "application/" + type);
        fileStreamResult.FileDownloadName = fileName;
        return fileStreamResult;
    }
```

## See also

* [Getting Started with the ASP.NET Core Report Viewer](https://help.boldreports.com/embedded-reporting/aspnet-core-reporting/report-viewer/display-ssrs-rdl-report-in-asp-net-core-application/)

* [Getting Started with the ASP.NET Core Report Writer](https://help.boldreports.com/embedded-reporting/aspnet-core-reporting/report-writer/export-ssrs-rdl-report/)

# How to Change the Parameter Drop-down Height and Width

The `parameterSettings` feature in Bold Reports allows you to modify the size of the parameters available in the parameter panel. By default, the height and width of the parameter panel are set to a specific value. However, in some cases, you may need to adjust these values to better suit your needs.

To do this, you can use the `parameterSettings` property in the Bold Reports API. This property helps you to change the height and width of the parameter panel to your desired values.

```html
<div id="viewer"></div>
<script>
    $("#viewer").boldReportViewer({
            parameterSettings: {
                popupHeight: "200px",
                popupWidth: "150px",
            }
             });
</script>
</html>
```

You can find the following help documentation for how to change the Parameter drop-down height and width on various platforms:

* [Angular](https://help.boldreports.com/embedded-reporting/angular-reporting/report-viewer/report-parameters/#change-the-parameter-drop-down-height-and-width)

* [React](https://help.boldreports.com/embedded-reporting/react-reporting/report-viewer/report-parameters/#change-the-parameter-drop-down-height-and-width)

* [Java Script](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/report-parameters/#change-the-parameter-drop-down-height-and-width)

* [Blazor](https://help.boldreports.com/embedded-reporting/blazor-reporting/report-viewer/report-parameters/#change-the-parameter-drop-down-height-and-width)

* [ASP.NET Core](https://help.boldreports.com/embedded-reporting/aspnet-core-reporting/report-viewer/report-parameters/#change-the-parameter-drop-down-height-and-width)

* [ASP.NET MVC](https://help.boldreports.com/embedded-reporting/aspnet-mvc-reporting/report-viewer/report-parameters/#change-the-parameter-drop-down-height-and-width)

* [ASP.NET Webforms](https://help.boldreports.com/embedded-reporting/aspnet-web-forms-reporting/report-viewer/report-parameters/#change-the-parameter-drop-down-height-and-width)


# Converting a Report to C# Object Model using ReportSerializer in Bold Reports

This code sample demonstrates the process of converting a report into a C# object model using the ReportSerializer helper from Bold Reports. The resulting C# object model allows for runtime modifications of the report. The following steps outline how to obtain the report in the C# object model using the Report Serializer:

``` csharp
    FileStream fileStream = new FileStream( reportFolderPath + "\Resources\sales.rdl", FileMode.Open, FileAccess.Read);

    MemoryStream reportStream = new MemoryStream();
    fileStream.CopyTo(reportStream);
    reportStream.Position = 0;
    fileStream.Close();

    BoldReports.RDL.DOM.ReportSerializer reportSerializer = new BoldReports.RDL.DOM.ReportSerializer();

    // Method to get the reports with the ReportDefinition object model.
    var reportDefinition = reportSerializer.GetReportDefinition(reportStream);

    // Property to get the parameters information from the report.
    var reportParameters = reportDefinition.ReportParameters;

    // Property to get the data sources information from the report.
    var reportDatasources = reportDefinition.DataSources;

    // Property to get the datasets from the report.
    var dataSets = reportDefinition.DataSets;

    // Property to get the report items information from the report body.
    BoldReports.RDL.DOM.ReportItems bodyReportItems = reportDefinition.ReportSections[0].Body.ReportItems;

    // Property to get the report items information from the report header.
    var headerReportItems = reportDefinition.ReportSections[0].Page.PageHeader.ReportItems;

    // Property to get the report items information from the report footer.
    var footerReportItems = reportDefinition.ReportSections[0].Page.PageFooter.ReportItems;
```

In summary, this code showcases how to convert a report file into a C# object model using the ReportSerializer helper, enabling runtime modification of the report.

# How to Display Footer on Last Page Only in Bold Reports

 In Bold Reports, it is not possible to conditionally hide or show the footer on the last page only. The footer section in Bold Reports is designed to be repeated on every page of the report. However, we can address this limitation by applying a **visibility expression** to the footer contents, allowing us to display the footer on the last page only.

To show the footer only on the last page, please follow the instructions below:

1. Select all the contents in the footer.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12558/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU3MTkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.pOTY9NZ3HShlKWVcK5keaihHVwAtmW96iofWYjSed2Q)

2. In the “Visibility” section of the properties window, click on the Expression.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12558/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU3MjAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.fW77q3eywCiKYndoXV3OyKmT-pWJpRltU56w_HyjMCA)

3. In the expression builder window, enter the following expression.
 
 ```VbCode
=IIF(Globals!PageNumber=Globals!TotalPages, False, True)
 ```
![image.png](https://support.boldreports.com/kb/attachment/article/12558/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU3MjUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.YO7A06l9pKUNmoVWie0a3kPtZP_Zghq2VgTLSGssMgk)


Using this expression, the footer can be displayed solely on the last page.
![image.png](https://support.boldreports.com/kb/attachment/article/12558/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU3MjQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.84AubIZ-uBzVV-HpAO-jHq9zNjB78gjylQHv6F5lnU8)

# How to Use Offline Scripts Instead of CDN Links

Bold Reports provides the option to use offline scripts instead of CDN links for the reporting application. Offline scripts can be executed without the need for a stable internet connection, making them useful in environments with no internet access. To use offline scripts, follow these steps:

1. Download the required scripts:
       
    Download the required scripts from the following link. This package will contain all the necessary scripts and styles for use offline.
 [BoldReports.JavaScript](    https://www.nuget.org/packages/BoldReports.JavaScript)

2. Add the scripts and styles in the project folder:

    After downloading the package, extract the files from the package. Copy the **Content** and  **Script** folders from the extracted files and paste them inside the application.  

     ![image.png](https://support.boldreports.com/kb/attachment/article/12560/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU3MzAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.x5TwXHwvZUzUwqlYbmlUDa8XToyparNr_3Zi7RYRdYc)

      ![image.png](https://support.boldreports.com/kb/attachment/article/12560/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU3MzEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.sdjZ5QpusvSqB3bkWdXFB1_tjcc5Pktc1Cl_4Ge37M0)

3. Replace the offline script instead of the CDN scripts in the html file.

     Refer to the scripts and styles in the Layout.cshtml file by dragging and dropping them from the respective folder.  
![image.png](https://support.boldreports.com/kb/attachment/article/12560/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU3MzgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.nuA62vDpfMHxIzBeG3Y7WAUs_cPipxQHd8dCmlEq9D4)

NOTE: It is important to keep the scripts up to date as Bold Reports may release updates or bug fixes that will incorporate into the offline scripts.


# How to Change the Parameter Item and Label Widths

The `parameterSettings` feature in Bold Reports allows you to customize the width of parameter items and labels in the parameter panel. By default, the width of these elements is set to a specific value, but in some cases, you may need to adjust them to fit your specific requirements.

To modify the width of parameter items and labels, use the `parameterSettings` property in the Bold Reports API. This property helps you adjust the width of the items and labels to your desired values.

```html
<div id="viewer"></div>
<script>
    $("#viewer").boldReportViewer(
        {
           parameterSettings: {
               itemWidth: '250px',
               labelWidth: 'auto'
               }
        });
</script>
</html>
```

Find the following help documentation for how to change the parameter item and label widths on various platforms:

* [Angular](https://help.boldreports.com/embedded-reporting/angular-reporting/report-viewer/report-parameters/#change-the-parameter-item-width-and-label-width)

* [React](https://help.boldreports.com/embedded-reporting/react-reporting/report-viewer/report-parameters/#change-the-parameter-item-width-and-label-width)

* [Java Script](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/report-parameters/#change-the-parameter-item-width-and-label-width)

* [Blazor](https://help.boldreports.com/embedded-reporting/blazor-reporting/report-viewer/report-parameters/#change-the-parameter-item-width-and-label-width)

* [ASP.NET Core](https://help.boldreports.com/embedded-reporting/aspnet-core-reporting/report-viewer/report-parameters/#change-the-parameter-item-width-and-label-width)

* [ASP.NET MVC](https://help.boldreports.com/embedded-reporting/aspnet-mvc-reporting/report-viewer/report-parameters/#change-the-parameter-item-width-and-label-width)

* [ASP.NET Webforms](https://help.boldreports.com/embedded-reporting/aspnet-web-forms-reporting/report-viewer/report-parameters/#change-the-parameter-item-width-and-label-width)


# Dynamically Changing Font Family Based on Conditions in a Report Using Bold Reports' Code Module

Dynamically change the text’s font family based on certain conditions in expressions. This allows you to customize the appearance of your report and improve its readability. Follow these steps to learn how to accomplish this.

Using the [Code Module](https://help.boldreports.com/enterprise-reporting/designer-guide/report-designer/compose-report/code-module/), change the text font family based on a condition in the report. Follow these steps to alter the font family of the text dynamically.


1. Click on the `code` in the Properties section of the report.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12564/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU5NzIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.bTC8tgb_Cm_IjZYF5EIUw_cd6A48rrT_udT3arQOP0A)

2. Include the following VB code snippet inside the code editor. This code is designed to change the font family based on the value of the lang field.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12564/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU5NzMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.XTDFRSygqiKDsVFq6_IRFLTLr2ikEIR73uPu16lvO7k)
 
 ```vb
Public Function getFontType(ByVal lang As String) As String
       If lang = "english" Then
           Return "Times New Roman"
       ElseIf lang = "hindi" Then
           Return "Calibri"
       ElseIf lang = "korean" Then
           Return "Algerian"
       End If
End Function
 ```

3. Locate the option to set the font family for the text.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12564/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU5NzQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.BKNsSfFfKmge9uJFxr4p9-s0rnTbCtxMS3dNHOkmxu8)

4. Set the expression for the font family in the tablix cell, like below.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12564/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU5NzUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.knaM_4uYVG62grXViYTL5gvTB4kK0MSD_xjM_0iHVU4)

5. Replace the existing font family value with an expression that calls the getFontType function, passing the relevant language value as the parameter. For example:
 
 ```vb
=Code.getFontType(Fields!lang.Value)
 ```
6. Apply the changes and preview the report to see the dynamically altered font family based on the condition specified in the code module.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12564/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU5NzYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.mvmJaTEEGj_OWTCesh8aSNRRaEIrB7FfDitRB94Li8E)

**Note**: Modify the code snippet as needed to include additional language options and corresponding font family values based on your specific requirements.

By following these steps and using the provided VB code snippet, you can customize the font family of text in your report dynamically, improving its readability and appearance based on specific conditions.

# How to convert numerical values into words for thousands, millions, billions, and trillions in Bold Reports.

Bold Reports allows you to convert number values to words, which enhances readability and improves the presentation of financial reports. This conversion offers the following benefits:
* Enhanced readability and comprehension of financial information.
* Adherence to language-specific conventions and localization requirements.
* Improved presentation and professionalism in financial reports.

The code module in Bold Reports allows you to add custom code to your report, and the provided code uses functions to convert a numeric value to its textual representation. This can be useful when you need to display numerical values as words in your report.

1. Click the outer grey surface report area and then click the **Properties** icon to open **Report Properties**.
     ![image.png](https://support.boldreports.com/kb/attachment/article/12567/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU3NTEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.RmNAG4thl8fUS1-AnEZ_H73Pvn5TbBpgCbWv1wToMHk)

2. The custom code option is listed under the **Code** category, click **Code…** to open Code Module dialog.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12567/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU3NTIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Sr3K1ph_BeLZVqUuzYLKxIiUYBwU8jaWJV11Mg7vJZk)

3. In the code tab, type the codes in Visual Basic (VB) language.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12567/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU3NTMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Qgxo0DENDP0IUjPCRvTP3kDL9tdBTo_-MeGUTw9StRs)

4. The following code example demonstrates the custom function that converts the given money value integer to a string.
     
 ```vb
Public Function SpellNumber(ByVal MyNumber)
Dim Dollers, penny, Temp
Dim DecimalPlace, Count
Dim Place(9) As String
Place(2) = " Thousand "
Place(3) = " Million "
Place(4) = " Billion "
Place(5) = " Trillion "
' String representation of amount.
MyNumber = Trim(Str(MyNumber))
' Position of decimal place 0 if none.
DecimalPlace = InStr(MyNumber, ".")
' Convert penny and set MyNumber to Dollars amount.
If DecimalPlace > 0 Then
    penny = GetTens(Left(Mid(MyNumber, DecimalPlace + 1) & _
              "00", 2))
    MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
End If
Count = 1
Do While MyNumber <> ""
    Temp = GetHundreds(Right(MyNumber, 3))
    If Temp <> "" Then Dollers = Temp & Place(Count) &Dollarss
    If Len(MyNumber) > 3 Then
        MyNumber = Left(MyNumber, Len(MyNumber) - 3)
    Else
        MyNumber = ""
    End If
    Count = Count + 1
Loop
Select Case Dollars
    Case ""
        Dollers = "No Dollers"
    Case "One"
        Dollers = "One Dollers"
     Case Else
        Dollers = Dollers & " Dollers"
End Select
Select Case penny
    Case ""
        penny = " "
    Case "One"
        penny = " and One penny"
          Case Else
        penny = " and " & penny & " penny"
End Select
SpellNumber = Dollers & penny
End Function
' Convert a number from 100-999 into text. 
Function GetHundreds(ByVal MyNumber)
Dim Result As String
If Val(MyNumber) = 0 Then Exit Function
MyNumber = Right("000" & MyNumber, 3)
' Convert the hundreds place.
If Mid(MyNumber, 1, 1) <> "0" Then
    Result = GetDigit(Mid(MyNumber, 1, 1)) & " Hundred "
End If
' Convert the tens and one's place.
If Mid(MyNumber, 2, 1) <> "0" Then
    Result = Result & GetTens(Mid(MyNumber, 2))
Else
    Result = Result & GetDigit(Mid(MyNumber, 3))
End If
GetHundreds = Result
End Function
' Convert a number from 10 to 99 into text. 
Function GetTens(TensText)
Dim Result As String
Result = ""           ' Null out the temporary function value.
If Val(Left(TensText, 1)) = 1 Then   ' If value between 10-19...
    Select Case Val(TensText)
        Case 10: Result = "Ten"
        Case 11: Result = "Eleven"
        Case 12: Result = "Twelve"
        Case 13: Result = "Thirteen"
        Case 14: Result = "Fourteen"
        Case 15: Result = "Fifteen"
        Case 16: Result = "Sixteen"
        Case 17: Result = "Seventeen"
        Case 18: Result = "Eighteen"
        Case 19: Result = "Nineteen"
        Case Else
    End Select
Else                                 ' If value between 20-99...
    Select Case Val(Left(TensText, 1))
        Case 2: Result = "Twenty "
        Case 3: Result = "Thirty "
        Case 4: Result = "Forty "
        Case 5: Result = "Fifty "
        Case 6: Result = "Sixty "
        Case 7: Result = "Seventy "
        Case 8: Result = "Eighty "
        Case 9: Result = "Ninety "
        Case Else
    End Select
    Result = Result & GetDigit _
        (Right(TensText, 1))  ' Retrieveone's place.
End If
GetTens = Result
End Function
' Convert a number from 1 to 9 into text. 
Function GetDigit(Digit)
Select Case Val(Digit)
    Case 1: GetDigit = "One"
    Case 2: GetDigit = "Two"
    Case 3: GetDigit = "Three"
    Case 4: GetDigit = "Four"
    Case 5: GetDigit = "Five"
    Case 6: GetDigit = "Six"
    Case 7: GetDigit = "Seven"
    Case 8: GetDigit = "Eight"
    Case 9: GetDigit = "Nine"
    Case Else: GetDigit = ""
End Select
End Function
 ```
 
 
 :::Info
The above code converts the money value to dollars. To modify it for your specific currency, you need to make the necessary adjustments based on your currency requirements.
 :::

5.  Click **OK**.

6. Use the following expression to call the custom code function in the report.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12567/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU3NTQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Kw-CvEXq3MT2QPsi9AGVayR3Vex4J4SsCcZJXDBUNk8)

7. To view the number of changes based on the price in a report, click **Preview**.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12567/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU3NTUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.euk2OKbXjRDzFQXeI85wsT9gym7ZkJESo8SwwaI44hc)


# How to Set Page Settings in Export

According to the RDL standard for page setup, any adjustments made to the `Page setup` dialogue will only affect the printing process and not the export. However, Bold Reports offers support for this functionality. If you wish to apply modifications to the export file as well, you must enable the "Use Print Page Settings" option in the `Export setup` dialogue. Enabling this option will obtain the exported file with your desired page setup changes.

Follow these steps to enable the "Use Print Page Settings" option in the Bold Reports export setup.

1. Navigate to the Export Setup option in the Report Viewer toolbar. This will open the export setup dialog box.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12579/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU4MDQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.SQ01E7404D-1a62tqcadz8h4L71FVTVSJcOZQTN0t0w)

2. In the export setup dialog box, locate and enable the "Use Print Page Settings" option.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12579/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU4MDUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.7q9ud_Oq3R0x4eZ_jR-7CTCT7cgPJv3by4NcdkD1NA0)

Once you have enabled this option, any modifications you make to the report's page setup will be reflected in the exported output. This means you can ensure that the exported report matches the printed version in terms of page layout and formatting.


# How to Configure Gmail SMTP Server in Email Settings of Bold Reports On-Premise

This section provides instructions on how to configure the Gmail SMTP Server in the Email Settings of Bold Reports On-Premise.

To send emails using Gmail SMTP, you will need to utilize an application password that is generated from your Google account. Please follow the instructions below to enable Two-Step Verification and generate the application password.

1. Sign in to your Gmail account.
2. Navigate to the account security tab  [https://myaccount.google.com/security](https://myaccount.google.com/security).
3. In the **How you sign in to Google** , Go to 2-Step Verification. 

     ![pic0.png](https://support.boldreports.com/kb/attachment/article/12603/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU4NzMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.ZbmC2tkuFvgtXMLOCWsZI1YUrm-ta06vkxmtv9t865U)

     ![pic0.1.png](https://support.boldreports.com/kb/attachment/article/12603/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU4NzQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.p5CzkAN6wFU6LPrR4XwbVeKyBlgZP7gKiHTLbZ_17Ls)

     ![pic1.png](https://support.boldreports.com/kb/attachment/article/12603/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU4NzUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.yohBDuk0yc6aTlBhb4cOw9DrpJrm7bXUbux40WbNGKM)

4. Turn on 2-Step Verification.

     ![pic2.png](https://support.boldreports.com/kb/attachment/article/12603/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU4NzYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.nLPgsNQ51WnzOA1GxIvaOAglJywBiwW5x3rP_3Yugp0)

5. At the bottom of the page, select the **App passwords**.

     ![pic3.png](https://support.boldreports.com/kb/attachment/article/12603/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU4NzciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Jik8nbiKJZ3-B9101XAqkw8_-7hJhQPzkGYnuX43sVs)

6. Create a custom name for the application.
 
     ![pic4.png](https://support.boldreports.com/kb/attachment/article/12603/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU4NzgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.xfbQBcxjdiv_y7fD4wrQHc1PBLtitI95s-o2JXMhg_Q)

7. Press the Generate button.
 
     ![pic5.png](https://support.boldreports.com/kb/attachment/article/12603/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU4NzkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.agYHlnBVr2Nk8mGJHXVfuuW15xLSyq5F55N2nkP641k)

8. Copy the generated password.
 
    ![pic6.png](https://support.boldreports.com/kb/attachment/article/12603/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU4ODAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.hVIIEx5QLSxcOLmkVsPDaqo2c68DyuRw-JdifMxw59I)
        
9. We have to save the following Gmail SMTP Server details in the email settings [email settings](https://help.boldreports.com/enterprise-reporting/administrator-guide/manage-app-settings/email-settings/) of Bold Reports On-Premise.


    | Configuration Settings | Values |
    | --- | --- |
    | SMTP Server | smtp.gmail.com  |
    | SMTP Port | 587 |
    | Sender Name| Bold Reports Server  |
    | Sender Email Address | Your Gmail Address |
    | Authentication Type | Basic Authentication |
    | Username | Your Gmail Address |
    | Password | Generated App Password |
    | Enable SSL | True |

     :::Info
    **Anonymous Authentication** is not supported in the Gmail SMTP Server.
     :::

# How to Use the Bold Reports Report Viewer in a Django Application

**Django** is a high-level Python web framework that enables developers to build web applications quickly, efficiently, and securely. It follows the Model-View-Controller (MVC) architectural pattern, although it is often referred to as Model-View-Template (MVT) in Django terminology.

While the Bold Reports Report Viewer is primarily designed for JavaScript-based applications, leverage its powerful functionalities in a Django application by utilizing an ASP.NET Core service as an intermediary. In this article, you will explore the process of integrating the JavaScript Report Viewer with an ASP.NET Core service and demonstrate how to use it effectively in a Django application.

## Prerequisites

Before getting started with Bold Report Viewer in Django, make sure your development environment includes the following:

* [Microsoft Visual Studio Code](https://code.visualstudio.com/)
* [Python extension](https://www.python.org/) (`v3.9.1 or latest`)
* `Python.exe` path must be set in the 'path' environment variable (To set the environment variable path, press Win + R and paste the following command)

```csharp
rundll32.exe sysdm.cpl,EditEnvironmentVariables
```

> Create a path to the Python311.exe and another one is the path to the script folder. Once you install the python, you will see the Python.exe with the same place.

```csharp
C:\Users\Profile\AppData\Local\Programs\Python\Python311\Scripts
C:\Users\Profile\AppData\Local\Programs\Python\Python311
```

## Create Virtual Environment

Create a virtual environment in which Django is installed. Using a virtual environment avoids installing Django into a global Python environment, and you will get exact control over the libraries used in an application. Please follow these steps to set up the Django project development environment in VS Code.

1. Create a project folder on the file system, like `Django`, open the terminal in VS Code, and type the following command.

   ```csharp
    python -m venv myenv
   ```

   If the virtual environment is not activated, activate the environment by typing this command:

   ```csharp
    myenv\Scripts\activate.bat
   ```

2. Open the Command Palette in the View option, select 'Python: Select Interpreter', and select the virtual environment in your project folder that starts with ./env or .\env.
![select-interpreter.png](https://support.boldreports.com/kb/attachment/article/12616/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU5NDAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.cH5LTjpI6BkcnWVSc5LNl1b5WGY8uChDzgqxh6zco6g)
![virtual-environment.png](https://support.boldreports.com/kb/attachment/article/12616/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU5NDEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.6kxJcBiTeKd_4mA5mGUPeirS134TNBkWiF0kAVbSA-4)

3. To install the Django web framework on your machine, install Django using the PIP command. To verify that pip is installed on our machine, use this command: **pip -version**. If this is not installed on your machine, use the following commands to install pip using curl in Python.

   ```csharp
    curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
    python get-pip.py
   ```

   If this is already installed on your machine, use the below commands to update pip in Python.

   ```csharp
    python -m pip install --upgrade pip
   ```

4. Now, run the following command to install Django in the virtual environment.

   ```csharp
    python -m pip install Django
   ```

## Create Django Project

1. To create the Django project in VS Code Terminal, run the following command (the use of `.` at the end means the current folder is your project folder).

   ```csharp
    django-admin startproject Embedsample .
   ```

   > Note: To avoid error (the term 'django-admin' is not recognized as the name of a cmdlet), run the following command in the terminal. **pip install django-binary-database-files**

2. Create an empty development database by running the following command:

   ```csharp
    python manage.py migrate
   ```

## Creating a Django app

1. To execute the startup command of the administrative utility in your project folder (where `manage.py` is located), enter the following command in the terminal.

   ```csharp
    python manage.py startapp Boldreportsapp
   ```

2. Now, edit `views.py` in Boldreportsapp and add the following code given, which creates a single view for the app's home page.

   ```csharp
    from django.shortcuts import render
    from django.http import HttpResponse
    from django.template import loader

    # Create your views here.
    def boldreports(request):
     template = loader.get_template('index.html')
     return HttpResponse(template.render())
   ```

3. Create a `templates` folder inside the `Boldreportsapp` folder, and create an HTML file named **index.html**.

4. In the report_viewer.html file, include the necessary JavaScript code to create and configure the Bold Report Viewer. You can refer to the JavaScript documentation provided by Bold Reports for detailed instructions on displaying an SSRS RDL report in a JavaScript application: [Javascript Report Viewer](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/display-ssrs-rdl-report-in-javascript-application/).

   In that documentation, you will find step-by-step instructions on including the required JavaScript files, creating an instance of the Bold Report Viewer, and loading and display an SSRS RDL report.

5.  The Report Viewer requires a Web API service to process the report files. You should create any one of the following Web API services to run this application.

    * [ASP.NET Web API Service](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/report-service/create-aspnet-web-api-service/)
    * [ASP.NET Core Web API Service](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/report-service/create-aspnet-core-web-api-service/)

   ```html
   <!DOCTYPE html>
      <html xmlns="http://www.w3.org/1999/xhtml">
         <head>
            <title>Report Viewer HTML page</title>
            <link href="https://cdn.boldreports.com/5.1.20/content/material/bold.reports.all.min.css" rel="stylesheet" />
            <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>

            <!--Render the gauge item. Add this script only if your report contains the gauge report item. -->
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/ej2-base.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/ej2-data.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/ej2-pdf-export.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/ej2-svg-base.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/data-visualization/ej2-lineargauge.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/data-visualization/ej2-circulargauge.min.js"></script>

            <!--Render the map item. Add this script only if your report contains the map report item.-->
            <script src="https://cdn.boldreports.com/5.1.20/scripts/data-visualization/ej2-maps.min.js"></script>

            <!-- Report Viewer component script-->
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/bold.reports.common.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/bold.reports.widgets.min.js"></script>

            <!--Render the chart item. Add this script only if your report contains the chart report item.-->
            <script src="https://cdn.boldreports.com/5.1.20/scripts/data-visualization/ej.chart.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/bold.report-viewer.min.js"></script>
         </head>
         <body>
            <div style="height: 600px; width: 950px;">
                  <!-- Creating a div tagthath will act as a container for the boldReportViewer widget.-->
                  <div style="height: 600px; width: 950px; min-height: 400px;" id="viewer"></div>
                  <!-- Setting property and initializing boldReportViewer widget.-->
                  <script type="text/javascript">
                     $(function () {
                        $("#viewer").boldReportViewer({
                              reportServiceUrl: "https://demos.boldreports.com/services/api/ReportViewer",
                              reportPath: '~/Resources/docs/sales-order-detail.rdl'
                        });
                     });
                  </script>
            </div>
         </body>
      </html>
   ```

6. To change the settings, click the `settings.py` in Embedsample, add the following line in the INSTALLED_APPS, and then run this command: **python manage.py migrate**.

   ```csharp
    INSTALLED_APPS = [
      'Boldreportsapp'
    ]
   ```

7. Create a `urls.py`file in Boldreportsapp and add the sample code given below.

   ```csharp
    from django.urls import path
    from Boldreportsapp import views

    urlpatterns = [
     path("", views.boldreports, name="boldreports")
    ]
   ```

8. The `Embedsample` folder also has a `urls.py` file, where URL routing is handled. Open `urls.py` in the Embedsample and add the code given below.

   ```csharp

   from django.contrib import admin
   from django.urls import include, path

   urlpatterns = [
    path("", include("Boldreportsapp.urls"))
   ]

   ```

   > Note: The above code pulls in the app's Boldreportsapp/urls.py using Django.urls.include, which keeps the app's routes contained within the app.

9. Finally, run the development server with **python manage.py runserver** and open a browser to `http://127.0.0.1:8000/`.
![output.png](https://support.boldreports.com/kb/attachment/article/12616/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU5MzgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.dWfqvAIOI1rAxz--aJrJeHBUd7pMkKwKXKq2jXc0-I8)

> Note: If the server is not running, navigate to the `/Embedsample` folder and execute the above command in the terminal.

# How to Add the Data Source Extension in Bold Reports



The `BoldReports.Net.Core` package provides an integrated data source processing extension that enables users to easily manage popular data sources like SQL Server, ODBC, and OleDb. This extension is included by default in Bold Reports.

If you want to process other data sources such as Web API, JSON, and Excel data, install the required packages to process certain types of data sources. It is crucial to install the required extension package to unlock the full potential of Bold Reports and ensure seamless integration with various data sources.

DataSource extension packages provide the necessary functionality and tools to process and integrate specific types of data sources into Bold Reports.

Please find the steps to add the extension package to the application to process various data sources.

1. Right-click the project or solution in the *Solution Explorer tab*, and choose **Manage NuGet Packages**. Alternatively, select the **Tools > NuGet Package Manager > Manage NuGet Packages** for the Solution menu command.

2. Search for the required NuGet package, and install it in your application. 
     ![image.png](https://support.boldreports.com/kb/attachment/article/12629/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYyMjUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.BBQBB3OCYNH-2Bjp6DEs2LMLF-mzOI-nRUQRuJiOItM)

 The **BoldReports.Data.WebData** component is capable of handling various types of data sources such as **WebAPI, JSON, XML, and OData.**
Install the respective NuGet package in the application based on the required data connector. The NuGet package names for each data connector are provided in the following table:

| Data source |  Package Name|
| --- | --- |
| Web data sources(WebAPI, JSON, XML, and OData) | BoldReports.Data.WebData |
| Postgre SQL data source |	BoldReports.Data.PostgreSQL  |
|  MySQL data sources(MySQL, MariaDB, MemSQL)| BoldReports.Data.MySQL |
|Excel data source  | BoldReports.Data.Excel |
| CSV data source |  BoldReports.Data.Csv|
| Oracle data source |  BoldReports.Data.Oracle|
|ElasticSearch data source  |BoldReports.Data.ElasticSearch  |
|Snowflake data source  |  BoldReports.Data.Snowflake|
|SSAS data source  |  BoldReports.Data.SSAS|


##### Register web data source extension in application startup

To utilize the extension capability, it is crucial to register the extension assembly in the **Program.cs** file. By doing so, the application gains access to the additional functionalities provided by the extension methods defined within the assembly. Registering the extension assembly involves adding the necessary configuration or setup code in the Program.cs file, typically within the ConfigureServices.

1. Open the program.cs file.

2. Include the following code:
    ![image.png](https://support.boldreports.com/kb/attachment/article/12629/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjI1NDc0Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.fDvlJGlial-2sUD0tkz7rVZk-XW_HTKpHW0kFulg7vg)

 
 ```vb
ReportConfig.DefaultSettings = new ReportSettings().RegisterExtensions(new List<string> {"BoldReports.Data.WebData",
                                                                                         "BoldReports.Data.PostgreSQL",
                                                                                         "BoldReports.Data.Excel",
                                                                                         "BoldReports.Data.Csv",
                                                                                         "BoldReports.Data.Oracle",
                                                                                         "BoldReports.Data.ElasticSearch",
                                                                                         "BoldReports.Data.Snowflake",
                                                                                         "BoldReports.Data.SSAS"});
 ```





# How to Use the Bold Reports Report Designer in a Django Application

**Django** is a high-level Python web framework that enables developers to build web applications quickly, efficiently, and securely. It follows the Model-View-Controller (MVC) architectural pattern, although it is often referred to as Model-View-Template (MVT) in Django terminology.

While the Bold Reports Report Designer is primarily designed for JavaScript-based applications, leverage its powerful functionalities in a Django application by utilizing an ASP.NET Core service as an intermediary. In this article, you will explore the process of integrating the JavaScript Report Designer with an ASP.NET Core service and demonstrate how to use it effectively in a Django application.

## Prerequisites

Before getting started with Bold Report Designer in Django, make sure your development environment includes the following:

* [Microsoft Visual Studio Code](https://code.visualstudio.com/)
* [Python extension](https://www.python.org/) (`v3.9.1 or latest`)
* `Python.exe` path must be set in the 'path' environment variable (To set the environment variable path, press Win + R and paste the following command).

```csharp
rundll32.exe sysdm.cpl,EditEnvironmentVariables
```

> Create a path to the Python311.exe and another one is the path to the script folder. Once you install the python, you will see the Python.exe in the same place.

```csharp
C:\Users\Profile\AppData\Local\Programs\Python\Python311\Scripts
C:\Users\Profile\AppData\Local\Programs\Python\Python311
```

## Create a Virtual Environment

Create a virtual environment in which Django is installed. Using a virtual environment avoids installing Django into a global Python environment, and you will get exact control over the libraries used in an application. Please follow these steps to set up the Django project development environment in VS Code.

1. Create a project folder on the file system, like `Django,` open the terminal in VS Code, and type the following command.

   ```csharp
    python -m venv myenv
   ```

   If the virtual environment is not activated, activate the environment by typing this command:

   ```csharp
    myenv\Scripts\activate.bat
   ```

2. Open the Command Palette in the View option, select Python and Interpreter, and select the virtual environment in your project folder starting with ./env or .\env.
![select-interpreter.png](https://support.boldreports.com/kb/attachment/article/12616/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU5NDAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.cH5LTjpI6BkcnWVSc5LNl1b5WGY8uChDzgqxh6zco6g)
![virtual-environment.png](https://support.boldreports.com/kb/attachment/article/12616/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU5NDEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.6kxJcBiTeKd_4mA5mGUPeirS134TNBkWiF0kAVbSA-4)

3. To install the Django web framework on your machine, install Django using the PIP command. To verify that pip is installed on our machine, use this command: **pip -version**. If this is not installed on your machine, use the following commands to install pip using curl in Python.

   ```csharp
    curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
    python get-pip.py
   ```

   If this is already installed on your machine, use the following commands to update pip in Python.

   ```csharp
    python -m pip install --upgrade pip
   ```

4. Now, run the following command to install Django in the virtual environment.

   ```csharp
    python -m pip install Django
   ```

## Create Django Project

1. To create the Django project in VS Code Terminal, run the following command (the use of `.` at the end means the current folder is your project folder).

   ```csharp
    django-admin startproject Embedsample .
   ```

   > Note: To avoid error (the term 'django-admin' is not recognized as the name of a cmdlet), run the following command in the terminal. **pip install django-binary-database-files**.

2. Create an empty development database by running the following command:

   ```csharp
    python manage.py migrate
   ```

## Creating a Django app

1. To execute the startup command of the administrative utility in your project folder (where `manage.py` is located), enter the following command in the terminal.

   ```csharp
    python manage.py startapp Boldreportsapp
   ```

2. Now, edit `views.py` in Boldreportsapp and add the following code, which creates a single view for the app's home page.

   ```csharp
    from django.shortcuts import render
    from django.http import HttpResponse
    from django.template import loader

    # Create your views here.
    def boldreports(request):
     template = loader.get_template('index.html')
     return HttpResponse(template.render())
   ```

3. Create a `templates` folder inside the `Boldreportsapp` folder, and create an HTML file named **index.html**.

4. In the report_designer.html file, include the necessary JavaScript code to create and configure the Bold Report Designer. Refer to the JavaScript documentation provided by Bold Reports for detailed instructions on displaying an SSRS RDL report in a JavaScript application: [Javascript Report Designer](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-designer/add-web-report-designer-to-a-javascript-application/)

In that documentation, you will find step-by-step instructions on including the required JavaScript files, creating an instance of the Bold Report Designer, and loading the display of an SSRS RDL report.

5. The Web Report Designer requires a Web API service to process data and file actions. Therefore, you must create one of the following Web API services to run this application.
    * [ASP.NET Web API Service]( https://help.boldreports.com/embedded-reporting/javascript-reporting/report-designer/report-service/create-aspnet-web-api-service/)
    * [ASP.NET Core Web API Service]( https://help.boldreports.com/embedded-reporting/javascript-reporting/report-designer/report-service/create-aspnet-core-web-api-service/)

   ```html
   <!DOCTYPE html>
      <html xmlns="http://www.w3.org/1999/xhtml">
         <head>
            <title>Report Designer HTML page</title>
            <link href="https://cdn.boldreports.com/5.1.20/content/material/bold.reports.all.min.css" rel="stylesheet" />
            <link href="https://cdn.boldreports.com/5.1.20/content/material/bold.reportdesigner.min.css" rel="stylesheet" />
            <link href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.37.0/codemirror.min.css" rel="stylesheet" />
            <link href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.37.0/addon/hint/show-hint.min.css" rel="stylesheet" />
            <script src="https://cdn.boldreports.com/external/jquery-1.10.2.min.js" type="text/javascript"></script>
            <script src="https://cdn.boldreports.com/external/jsrender.min.js" type="text/javascript"></script>
            <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.37.0/codemirror.min.js" type="text/javascript"></script>
            <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.37.0/addon/hint/show-hint.min.js" type="text/javascript"></script>
            <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.37.0/addon/hint/sql-hint.min.js" type="text/javascript"></script>
            <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.37.0/mode/sql/sql.min.js" type="text/javascript"></script>
            <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.44.0/mode/vb/vb.min.js" type="text/javascript"></script>
    
            <!--Used to render the gauge item. Add this script only if your report contains the gauge report item. -->
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/ej2-base.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/ej2-data.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/ej2-pdf-export.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/ej2-svg-base.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/data-visualization/ej2-lineargauge.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/data-visualization/ej2-circulargauge.min.js"></script>
    
            <!--Render the map item. Add this script only if your report contains the map report item.-->
            <script src="https://cdn.boldreports.com/5.1.20/scripts/data-visualization/ej2-maps.min.js"></script>
    
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/bold.reports.common.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/bold.reports.widgets.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/bold.report-designer-widgets.min.js"></script>
    
            <!--Used to render the chart item. Add this script only if your report contains the chart report item.-->
            <script src="https://cdn.boldreports.com/5.1.20/scripts/data-visualization/ej.chart.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/bold.report-viewer.min.js" type="text/javascript"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/bold.report-designer.min.js" type="text/javascript"></script>
         </head>
         <body>
            <div style="height: 600px; width: 950px;">
                  <!-- Creating a div tag that will act as a container for the boldReportDesigner widget.-->
                  <div style="height: 600px; width: 950px; min-height: 400px;" id="designer"></div>
                  <!-- Setting property and initializing boldReportDesigner widget.-->
                  <script type="text/javascript">
                     $(function () {
                        $("#designer").boldReportDesigner({
                              serviceUrl: "https://demos.boldreports.com/services/api/ReportingAPI",
                        });
                     });
                  </script>
            </div>
         </body>
      </html>
   ```

6. To change the settings, click the settings.py in Embedsample and run this command: **python manage.py migrate**.

   ```csharp
    INSTALLED_APPS = [
      'Boldreportsapp'
    ]
   ```

7. Create a `urls.py` file in Boldreportsapp and add the following sample code given.

   ```csharp
    from django.urls import path
    from Boldreportsapp import views

    urlpatterns = [
     path("", views.boldreports, name="boldreports")
    ]
   ```

8. The `Embedsample` folder also has a `urls.py` file, where URL routing is handled. Open `urls.py` in the Embedsample and add the following sample code given.

   ```csharp

   from django.contrib import admin
   from django.urls import include, path

   urlpatterns = [
    path("", include("Boldreportsapp.urls"))
   ]

   ```

   > Note: The above code pulls in the app's Boldreportsapp/urls.py using django.urls.include, which keeps the app's routes contained within the app.

9. Finally, run the development server with **python manage.py runserver** and open a browser to `http://127.0.0.1:8000/`.
![Output.png](https://support.boldreports.com/kb/attachment/article/12630/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYwMDMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Ejo2DcJ93q5b2cVjwooHuzUTgJHCZNAyJf_J-JdGCDM)

> Note: If the server is not running, navigate to the `/Embedsample` folder and execute the above command in the terminal.

# Change the WEB API Connection String Dynamically

In Bold Reports, you can dynamically change the web API data source connection details at runtime. This means that users can modify the connection details of their web API data source without having to restart their application or perform any additional configuration steps. This feature allows greater flexibility in managing data sources and simplifies the process of connecting to various data sources.

By changing the web API data source connection details dynamically at runtime, users can easily switch between different data sources, update connection strings, and adjust other connection details as needed. This enhances the reporting capabilities of Bold Reports and allows users to quickly and easily adapt to changing data requirements.

Find the following steps to change the WEB API connection string:

1. The data source information is stored in JSONResult, and you can store it in the local property.

    ```csharp
            private Dictionary<string, object> _jsonResult;
            public object PostReportAction([FromBody] Dictionary<string, object> jsonArray)
            {
                _jsonResult = jsonArray;
                return ReportHelper.ProcessReport(jsonArray, this, this._cache);
            }
    ```

2. Utilize the jsonResult information with the **ReportHelper.GetDatasource** API to retrieve the data source details of the reports. To change the connection string of the data source, use the **DataSourceCredentials** object.

    ```csharp
            public void OnReportLoaded(ReportViewerOptions reportOption)
            {
                List<DataSourceInfo> datasources = ReportHelper.GetDataSources(_jsonResult, this, _cache);
                foreach (DataSourceInfo item in datasources)
                {
                    RestAPIModel dataModel = null;
                    if (item.DataSourceName == "Customer")
                    {
                        dataModel = JsonHelper.Deserialize<RestAPIModel>(item.ConnectString);
                        string connectionString = "https://customerdemo.boldreports.com/corewebapi/api/customers";
                        DataSourceCredentials DataSourceCredentials = new DataSourceCredentials();
                        DataSourceCredentials.Name = item.DataSourceName;
                        DataSourceCredentials.UserId = null;
                        dataModel.URL = connectionString;
                        DataSourceCredentials.Password = null;
                        DataSourceCredentials.ConnectionString = JsonHelper.SerializeObject(dataModel);
                        DataSourceCredentials.IntegratedSecurity = false;
                        reportOption.ReportModel.DataSourceCredentials = new List<DataSourceCredentials>
                            {
                                    DataSourceCredentials
                            };
                    }
                }
            }
    ```

3. The **JsonHelper** class provides two methods: **Deserialize** and **SerializeObject**. These methods enable you to deserialize a JSON string into an object and serialize an object into a JSON string, respectively.

    ```csharp
            internal class JsonHelper
        {
            internal static ObservableCollection<JsonSchemaInfo> PortSelectedTableToJsonSchemInfo(List<TableSchemaInfo> selectedTableSchema)
            {
                ObservableCollection<JsonSchemaInfo> selectedJsonSchemas = new ObservableCollection<JsonSchemaInfo>();
                selectedTableSchema.ForEach(tableSchema =>
                {
                    var schema = new JsonSchemaInfo
                    {
                        SchemaName = tableSchema.ColumnName,
                        FiniteArraySchemaType = tableSchema.FiniteArraySchemaType,
                        SchemaType = tableSchema.SchemaType,
                        IsAnonymousSchema = tableSchema.IsAnonymousSchema,
                        ValueType = tableSchema.ValueType,
                        InnerArrayCount = tableSchema.InnerArrayCount,
                        IsMapping = tableSchema?.IsMapping != null ? tableSchema.IsMapping : false
                    };
                    var childSchemas = RemoveJsonSchemaFromOriginalSchema(tableSchema.ColumnSchemaInfoCollection);
                    foreach (var s in childSchemas)
                    {
                        schema.ChildSchemas.Add(s);
                    }
                    selectedJsonSchemas.Add(schema);
                });
                return selectedJsonSchemas;
            }
            private static ObservableCollection<JsonSchemaInfo> RemoveJsonSchemaFromOriginalSchema(List<TableSchemaInfo> selectedTableSchema)
            {
                ObservableCollection<JsonSchemaInfo> selectedJsonSchemas = new ObservableCollection<JsonSchemaInfo>();
                if (selectedTableSchema == null)
                {
                    throw new ArgumentNullException();
                }
                foreach (var tableSchema in selectedTableSchema)
                {
                    JsonSchemaInfo schema = new JsonSchemaInfo()
                    {
                        SchemaName = tableSchema.ColumnName,
                        FiniteArraySchemaType = tableSchema.FiniteArraySchemaType,
                        InnerArrayCount = tableSchema.InnerArrayCount,
                        IsAnonymousSchema = tableSchema.IsAnonymousSchema,
                        SchemaType = tableSchema.SchemaType,
                        ValueType = tableSchema.ValueType,
                    };
                    foreach (JsonSchemaInfo item in RemoveJsonSchemaFromOriginalSchema(tableSchema.ColumnSchemaInfoCollection))
                    {
                        schema.ChildSchemas.Add(item);
                    }
                    selectedJsonSchemas.Add(schema);
                }
                return selectedJsonSchemas;
            }
            internal static bool GetMappingStatus(List<TableSchemaInfo> SelectedTableSchema, WebConnectionType webConnectionType)
            {
                if (webConnectionType != WebConnectionType.GeneralJson)
                {
                    return false;
                }
                if (SelectedTableSchema != null && SelectedTableSchema?.Count > 0)
                {
                    return false;
                }
                return false;
            }
            public static T Deserialize<T>(string jsonstr)
            {
                return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(jsonstr);
            }
            internal static string SerializeObject(object value)
            {
                return Newtonsoft.Json.JsonConvert.SerializeObject(value, new Newtonsoft.Json.JsonSerializerSettings { ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver() });
            }
        }
    ```
    
By following these steps, you can dynamically change the connection string of the WEB API data source in Bold Reports. This feature allows you to switch between different data sources, update connection strings, and adjust other connection details as needed, enhancing your reporting capabilities.

# How to Get the Byte Array of the PDF File

A PDF byte array represents the binary data of a PDF document and can perform various operations and tasks. You can get the byte array of the PDF file in Bold Reports using the `ReportHelper.GetReport` method. Find the following steps to get the byte array of the PDF file in a custom button and click using the `ReportHelper.GetReport` method.

1. Add a button to the page and implement the functionality for the button's click event.
     
 ```html
<button id="GetByteArrays">Get PDF ByteArray</button>
 ```

2. In this button, click send request to the Web API server to get the byte array of the PDF file. Use the following JavaScript code to create the event with a custom button click:

     
 ```js
  <script type="text/javascript">
        $(function () {
            $("#viewer").boldReportViewer({
                reportServiceUrl: "https://demos.boldreports.com/services/api/ReportViewer",
                reportPath: '~/Resources/docs/sales-order-detail.rdl'
            });

            $("#GetByteArrays").click(function() {
                var proxy = $('#viewer').data('boldReportViewer');
                var Report = proxy.model.reportPath;
                var lastsIndex = Report.lastIndexOf("/");
                var reportName = Report.substring(lastsIndex + 1);
                var requrl = proxy.model.reportServiceUrl + '/GetByteArray';

                var _json = {
                    exportType: "PDF",
                    reportViewerToken: proxy._reportViewerToken,
                    ReportName: reportName
                };

                $.ajax({
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    url: requrl,
                    data: JSON.stringify(_json),
                    dataType: "json",
                    crossDomain: true,
                    success: function(response) {
                        console.log(response);
                    }
                });
            });
        });
    </script>
 ```

3. Include the following code sample in your service application controller to handle the POST request. Using the `ReportHelper.GetReport` method, you get the file stream, convert to a byte array, and return it.
     
 ```cs
    [HttpPost]
    public object GetByteArray([FromBody] Dictionary<string, object> jsonResult)
    {
        string _token = jsonResult["reportViewerToken"].ToString();
        var stream = ReportHelper.GetReport(_token, jsonResult["exportType"].ToString(), this, _cache);
        stream.Position = 0;
        byte[] reportPDFByteArray;
        using (var streamReader = new MemoryStream())
        {
            stream.CopyTo(streamReader);
            reportPDFByteArray = streamReader.ToArray();
        }
        return reportPDFByteArray;
    }
 ```

By following these steps, you can obtain the byte array of a PDF file using the Bold Reports `ReportHelper.GetReport` method and a custom button click event.

# Modifying the Page Orientation of a Report File

Page orientation refers to the layout of a report on a page, either in portrait (vertical) or landscape (horizontal) mode. Changing the page orientation can improve the presentation and readability of the report content.

To change the page orientation in a report, you need to modify the XML code associated with the report's structure. The following steps show how to change the page orientation to landscape:

1. Open the report in a text editor.

2. Locate the following XML element:
      
 ```xml
 <PageHeight>8.5in</PageHeight>
 <PageWidth>11in</PageWidth>
 ```

3. Change the value of the `PageHeight` element to 11in.
4. Change the value of the `PageWidth` element to 8.5in.
5. Save the XML file.

The report will now be displayed in landscape orientation when you open it in a reporting tool.

To change the page orientation to portrait, reverse the steps above.

The following table shows the values of the `PageHeight` and `PageWidth` properties for different page orientations:


|  Page orientation| PageHeight |  PageWidth|
| --- | --- | --- |
|  Portrait	| 8.5 inches | 11 inches |
| Landscape	 | 11 inches |  8.5 inches|


# How to Use the Bold Reports Report Viewer in a Flutter Application

**Flutter**, a popular cross-platform framework, allows developers to create beautiful and interactive mobile applications. However, when it comes to integrating reporting capabilities into a Flutter application, native support may be limited. Fortunately, with the help of the Bold Reports Report Viewer, we can seamlessly incorporate advanced reporting features into our Flutter projects. Flutter uses the Dart programming language, which is also developed by Google.

While the Bold Reports Report Viewer is primarily designed for JavaScript-based applications, leverage its powerful functionalities in a Flutter application by utiliizing an ASP.NET Core service as an intermediary. In this article, you will explore the process of integrating the JavaScript Report Viewer with an ASP.NET Core service and demonstrate how to use it effectively in a Flutter application.



## Prerequisites

Before getting started with the Bold Report Viewer in Flutter, make sure your development environment includes the following:

* [Microsoft Visual Studio Code](https://code.visualstudio.com/)
* [Flutter SDK](https://docs.flutter.dev/get-started/install/windows)

1. First, download and extract the Flutter SDK file, and place it in the designated folder. For example, I have stored it in `C:\src`. Next, set the environment variable path by pressing Win + R and pasting the following command.

   ```csharp
    rundll32.exe sysdm.cpl,EditEnvironmentVariables
   ```

2. Copy the path of the bin folder, which is `C:\src\flutter\bin`, and paste it by clicking the "New" button, followed by the "OK" button.
![environment.png](https://support.boldreports.com/kb/attachment/article/12704/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYzMDciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.GCAE78xAkpOfhnxJB866zPSlR_ble9JVfw1CkINIQE4)

3. Now, open Visual Studio Code and install Flutter and Dart in your application, as shown in the following snapshot.
![flutter-dart.png](https://support.boldreports.com/kb/attachment/article/12704/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYzMTUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.-NGNYG8t55NhcGDirn9SFsnmQRm60jCVwKJtA_1neWs)

## Creating a Flutter project

1. Now, create a new folder named "Flutter" and then open a new terminal by clicking on "Terminal -> New Terminal". Create a new sample project using the following command.

   ```csharp
    flutter create project_name
   ```
   If you already have a new project, you need to run the following command:
   
   ```csharp
    flutter pub get
   ```
   
    > After creating the project, navigate to the project directory by running the following command: `cd project_name.`

2. Then, you need to add the script and bold report viewer to **index.html**, located in the web folder.

3. In the report_viewer.html file, you'll need to include the necessary JavaScript code to create and configure the Bold Report Viewer. You can refer to the JavaScript documentation provided by Bold Reports for detailed instructions on displaying an SSRS RDL report in a JavaScript application: [Javascript Report Viewer](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/display-ssrs-rdl-report-in-javascript-application/).

   In that documentation, you will find step-by-step instructions on how to include the required JavaScript files, create an instance of the Bold Report Viewer, and load and display an SSRS RDL report.

4. The Report Viewer requires a Web API service to process the report files. You should create any one of the following Web API services to run this application.

    * [ASP.NET Web API Service](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/report-service/create-aspnet-web-api-service/)
    * [ASP.NET Core Web API Service](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/report-service/create-aspnet-core-web-api-service/)

   ```html
   <!DOCTYPE html>
      <html xmlns="http://www.w3.org/1999/xhtml">
         <head>
            <title>Report Viewer HTML page</title>
            <link href="https://cdn.boldreports.com/5.1.20/content/material/bold.reports.all.min.css" rel="stylesheet" />
            <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>

            <!--Render the gauge item. Add this script only if your report contains the gauge report item. -->
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/ej2-base.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/ej2-data.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/ej2-pdf-export.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/ej2-svg-base.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/data-visualization/ej2-lineargauge.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/data-visualization/ej2-circulargauge.min.js"></script>

            <!--Render the map item. Add this script only if your report contains the map report item.-->
            <script src="https://cdn.boldreports.com/5.1.20/scripts/data-visualization/ej2-maps.min.js"></script>

            <!-- Report Viewer component script-->
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/bold.reports.common.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/bold.reports.widgets.min.js"></script>

            <!--Render the chart item. Add this script only if your report contains the chart report item.-->
            <script src="https://cdn.boldreports.com/5.1.20/scripts/data-visualization/ej.chart.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/bold.report-viewer.min.js"></script>

            <script src="flutter.js" defer></script>

         </head>
         <body>
            <div style="height: 600px; width: 950px;">
                  <!-- Creating a div tag that will act as a container for the boldReportViewer widget.-->
                  <div style="height: 600px; width: 950px; min-height: 400px;" id="viewer"></div>
                  <!-- Setting property and initializing boldReportViewer widget.-->
                  <script type="text/javascript">
                     $(function () {
                        $("#viewer").boldReportViewer({
                              reportServiceUrl: "https://demos.boldreports.com/services/api/ReportViewer",
                              reportPath: '~/Resources/docs/sales-order-detail.rdl'
                        });
                     });
                  </script>
            </div>
         </body>
      </html>
   ```

5. Finally, run the command with the **flutter run -d chrome** to launch the application. The report will be rendered and displayed as shown in the following screenshot.
![flutter-output.png](https://support.boldreports.com/kb/attachment/article/12704/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYzMDkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.WzHlGmRvfVNcu8QWZ4SW6gFTvJr5xPWAai2hcHQfXd0)

# How to add Page Numbers to a Bold Reports report

Page numbers in a report are useful for easy navigation, referencing specific information, and facilitating cross-referencing between different sections of the report. Adding page numbers to a report in Bold Reports involves using the **Globals!PageNumber** and **Globals!TotalPages** expressions to set the page number for the report. By following these steps, you can add a textbox report item to the footer area and set the expression to display the page number and the total number of pages in the report.

To add page numbers to a report in Bold Reports using the Globals!PageNumber and Globals!TotalPages expressions, follow these steps:

 :::Info
  You can **NOT** use the **Global!PageNumber** in the report body, it is only allowed in the **header/footer.**
   :::

1. Drag and drop a textbox report item from the widgets pane onto the footer area and select it.
2. Right click inside the text box and then click on the expression.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12707/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY0NDEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.a1GyFozbq5E9_VD9w7WuBGA74EoooIIGXySRDii1JLI)
3. In the expression editor, enter the following expression. This expression concatenates the "Page" text, the current page number, a forward slash, and the total number of pages in the report.
![ExpressionSnap.png](https://support.boldreports.com/kb/attachment/article/12707/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYzNTIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.VsUeuR3H1RnRKEmpeEeT9YKbzjJxRgMUqtBWkaQlwDQ)
    ```
        ="Page " & Globals!PageNumber & " / " & Globals!TotalPages
    ```
5. Click OK to close the expression editor and save the changes to the report project.
6. Preview the report to ensure the page numbers are displaying correctly in the footer area.
      ![image.png](https://support.boldreports.com/kb/attachment/article/12707/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYzNTUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.b7FeyqJSXHNB_WgFg-d8p3b7yO89taSypX0D5ih19W0)
  The **Globals!PageNumber** expression represents the current page number, while the **Globals!TotalPages** represents the total number of pages in the report.
 
 @(Embed){PageNumber.rdl}(https://support.boldreports.com/kb/attachment/article/12707/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY0ODAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.wQj9BIbpwnh8zl1WeQc0o5ntFPy0RiMCYDTTcSgIUpA)

# How to Use the Bold Reports Report Designer in a Flutter Application

**Flutter**, a popular cross-platform framework, allows developers to create beautiful and interactive mobile applications. However, when it comes to integrating reporting capabilities into a Flutter application, native support may be limited. Fortunately, with the help of the Bold Reports Report Designer, we can seamlessly incorporate advanced reporting features into our Flutter projects. Flutter uses the Dart programming language, which is also developed by Google.

While the Bold Reports Report Designer is primarily designed for JavaScript-based applications, leverage its powerful functionalities in a Flutter application by utilizing an ASP.NET Core service as an intermediary. In this article, you will explore the process of integrating the JavaScript Report Designer with an ASP.NET Core service and demonstrate how to use it effectively in a Flutter application.


## Prerequisites

Before getting started with the Bold Report Designer in Flutter, ensure your development environment includes the following,

* [Microsoft Visual Studio Code](https://code.visualstudio.com/)
* [Flutter SDK](https://docs.flutter.dev/get-started/install/windows)

1. Download and extract the Flutter SDK file, then place it in the designated folder. For example, I have stored it in `C:\src.` Next, set the environment variable path by pressing Win + R and pasting the following command.

   ```csharp
    rundll32.exe sysdm.cpl,EditEnvironmentVariables
   ```

2. Copy the path of the bin folder, which is `C:\src\flutter\bin,` and paste it by clicking "New" followed by "OK."
![environment.png](https://support.boldreports.com/kb/attachment/article/12708/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYzMDciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.GCAE78xAkpOfhnxJB866zPSlR_ble9JVfw1CkINIQE4)

3. Now, open Visual Studio Code and install Flutter and Dart in your application as shown in the following screenshot.
![flutter-dart.png](https://support.boldreports.com/kb/attachment/article/12708/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYzMTUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.-NGNYG8t55NhcGDirn9SFsnmQRm60jCVwKJtA_1neWs)

## Creating a Flutter project

1. Now, create a new folder named "Flutter," then open a new terminal by clicking on "Terminal -> New Terminal." Create a new sample project using the following command.

   ```csharp
    flutter create project_name
   ```
   If you already have a new project, run the following command:
   
   ```csharp
    flutter pub get
   ```
   
    > After creating the project, navigate to the project directory by running the following command: 
>  `cd project_name`

2. Then you need to add the script and bold report designer to **index.html** located in the web folder.

3. In the report_designer.html file, include the necessary JavaScript code to create and configure the Bold Report Designer. Refer to the JavaScript documentation provided by Bold Reports for detailed instructions on displaying an SSRS RDL report in a JavaScript application: [Javascript Report Designer](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-designer/add-web-report-designer-to-a-javascript-application/)

    In that documentation, you will find step-by-step instructions on how to include the required JavaScript files, create an instance of the Bold Report Designer, and load the display of an SSRS RDL report.

4. The Web Report Designer requires a Web API service to process data and file actions. Therefore, you must create one of the following Web API services to run this application.
    * [ASP.NET Web API Service]( https://help.boldreports.com/embedded-reporting/javascript-reporting/report-designer/report-service/create-aspnet-web-api-service/)
    * [ASP.NET Core Web API Service]( https://help.boldreports.com/embedded-reporting/javascript-reporting/report-designer/report-service/create-aspnet-core-web-api-service/)

   ```html
   <!DOCTYPE html>
      <html xmlns="http://www.w3.org/1999/xhtml">
         <head>
            <title>Report Designer HTML page</title>
            <link href="https://cdn.boldreports.com/5.1.20/content/material/bold.reports.all.min.css" rel="stylesheet" />
            <link href="https://cdn.boldreports.com/5.1.20/content/material/bold.reportdesigner.min.css" rel="stylesheet" />
            <link href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.37.0/codemirror.min.css" rel="stylesheet" />
            <link href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.37.0/addon/hint/show-hint.min.css" rel="stylesheet" />
            <script src="https://cdn.boldreports.com/external/jquery-1.10.2.min.js" type="text/javascript"></script>
            <script src="https://cdn.boldreports.com/external/jsrender.min.js" type="text/javascript"></script>
            <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.37.0/codemirror.min.js" type="text/javascript"></script>
            <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.37.0/addon/hint/show-hint.min.js" type="text/javascript"></script>
            <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.37.0/addon/hint/sql-hint.min.js" type="text/javascript"></script>
            <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.37.0/mode/sql/sql.min.js" type="text/javascript"></script>
            <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.44.0/mode/vb/vb.min.js" type="text/javascript"></script>
    
            <!--Used to render the gauge item. Add this script only if your report contains the gauge report item. -->
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/ej2-base.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/ej2-data.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/ej2-pdf-export.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/ej2-svg-base.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/data-visualization/ej2-lineargauge.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/data-visualization/ej2-circulargauge.min.js"></script>
    
            <!--Render the map item. Add this script only if your report contains the map report item.-->
            <script src="https://cdn.boldreports.com/5.1.20/scripts/data-visualization/ej2-maps.min.js"></script>
    
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/bold.reports.common.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/bold.reports.widgets.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/common/bold.report-designer-widgets.min.js"></script>
    
            <!--Used to render the chart item. Add this script only if your report contains the chart report item.-->
            <script src="https://cdn.boldreports.com/5.1.20/scripts/data-visualization/ej.chart.min.js"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/bold.report-viewer.min.js" type="text/javascript"></script>
            <script src="https://cdn.boldreports.com/5.1.20/scripts/bold.report-designer.min.js" type="text/javascript"></script>

            <script src="flutter.js" defer></script>

         </head>
         <body>
            <div style="height: 600px; width: 950px;">
                  <!-- Creating a div tag which will act as a container for boldReportDesigner widget.-->
                  <div style="height: 600px; width: 950px; min-height: 400px;" id="designer"></div>
                  <script type="text/javascript">
                     window.addEventListener('load', function(ev) {
                        $(function () {
                           $("#designer").boldReportDesigner({
                              serviceUrl: "https://demos.boldreports.com/services/api/ReportingAPI",
                           });
                        });
                     });
                  </script>
            </div>
         </body>
      </html>
   ```

5. Finally, run the command with **flutter run -d chrome** to launch the application. The report will be rendered and displayed as shown in the following screenshot.
![flutter-output.png](https://support.boldreports.com/kb/attachment/article/12708/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYzMzAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.vnsp8nQJjJ61JcF-eam8C8gGwD0PbogPkM-nRgD1paQ)

# How to Set the Default Zoom Level in Bold Reports Viewer

In Bold Reports, you can customize the default zoom level in the viewer to enhance the user experience when viewing reports. By default, the zoom level is set to 100%, but with the help of the Zoom Factor API, you can easily adjust it to your desired value. This article provides instructions on how to use the default zoom level in the report viewer application.
The following table represents the zoom factor values corresponding to each zoom level:

| Zoom Vaue | Zoom level(%) |
| --- | --- |
| 0.5 | 50 |
|1  | 100 |
| 1.5 |  150|
|2  | 200 |

In the following code sample, the [zoomFactor](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/api-reference/members/#zoomfactor) property of the boldReportViewer function is set to 1.5, representing a zoom level of 150%.


```csharp
<div id="reportviewer"></div>
<script>
    $("#reportviewer").boldReportViewer(
            { 
               zoomFactor: 1.5 
            }
          );
</script>

```


The following is a snapshot of the Bold Reports viewer with the default zoom level set to 150%:

![image.png](https://support.boldreports.com/kb/attachment/article/12712/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYzNDkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.9bAyv7y79FTgKy8I1U5o1wNf_TfCNKQrQm3tr7D1Xyg)

# How to customize report layout in Bold Reports

By default, the report is rendered at the center with some default padding and margin. You can customize the report layout according to your specific requirements.

To achieve this, you need to make changes to the CSS code in your application. Follow the steps below:

1. Locate the CSS file of your application responsible for report rendering.
2. Look for the CSS selector ".e-reportviewer-pageouterline", which targets the outer container of the report.
3. Add the following CSS code within the "**.e-reportviewer-pageouterline**" selector:
   ```css
            .e-reportviewer-pageouterline
            {
            margin:0 !important;
            padding:0 !important;
            }
    ```
4. Save the CSS file.
 
5. By setting the margin and padding to 0, the report will be aligned to the top left corner.

      ![image.png](https://support.boldreports.com/kb/attachment/article/12718/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYzNjQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.uniIHowmJvp38B0LQ_REQM2B3u8WA5IcolhYtDpn1Zs)

> Remember, this modification will override the default center alignment and apply the top left alignment to the report.

# How to Connect with SSRS from Bold Reports Using Windows Impersonation

There are two options to establish a connection between SSRS and Bold Reports. The first option is to utilize Windows Impersonation information. This means that the connection will be established using the impersonated credentials of the currently logged-in user. The second option involves using system credentials within the application. In this case, the application will provide the necessary credentials to connect SSRS and Bold Reports. Both approaches allow for a secure and authenticated connection between the two systems.


## Connect with SSRS using the Windows user

To connect with SSRS using the Windows user, access the system credentials of the application by specifying the `ReportServerCredential` property within the `OnInitReportOptions` method of the Report Viewer Controller.

```csharp
[NonAction]
public void OnInitReportOptions(ReportViewerOptions reportOption)
{
    reportOption.ReportModel.ReportServerCredential = System.Net.CredentialCache.DefaultCredentials;
}
```

## Connect with SSRS using the user credentials

If you want to connect with SSRS using user credentials, provide the appropriate network credentials. Within the  `OnInitReportOptions` method of the Report Viewer Controller, specify the `ReportServerCredential` property as follows:

```csharp
[NonAction]
public void OnInitReportOptions(ReportViewerOptions reportOption)
{
    //Add SSRS Report Server credential.
    reportOption.ReportModel.ReportServerCredential = new System.Net.NetworkCredential("UserName", "Password");
}
```

For more information and related resources, refer to the following:

* [Does Bold Report Viewer use SSRS Report processing?](https://help.boldreports.com/embedded-reporting/faq/does-bold-report-viewer-use-ssrs-report-processing/)

* [How to provide permission for users to access the SSRS Report Server reports?](https://help.boldreports.com/embedded-reporting/faq/ssrs-enable-permission/)

# How to Hide Columns if the Data is Empty in the Tablix

In Bold Reports, you have the ability to control the visibility of a tablix column depending on the presence or absence of data. This feature allows you to effectively manage the display of columns by setting the visibility property and utilizing expressions. This article provides a step-by-step guide on achieving this behavior in your reports.

**Steps to hide the column if tablix contains empty data:**
1. Open the Bold Reports designer, select the tablix, enable the advanced mode, and then set the visibility expression for the columns to hide them when they contain empty data.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12722/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3NTQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.omeywpEWkhfmN6yGnBJp2XTbVgEsG09IrwIlAyPhlv0)

    ![image.png](https://support.boldreports.com/kb/attachment/article/12722/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3NTUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.OoRGCtHO6R-ch2ka0mPq_mj0bwH3nUJvuZLwOtjzlvA)

2. In the properties window or pane, locate the Visibility property. Next, click on the expression button (a white box) adjacent to the Visibility property.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12722/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3NTYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.4-mlum_tqtMFmEA1vGd5Xnc2hHGPTLVYl8V7IdycDfQ)
 
3. This action will open the Expression Editor, where you can define the logic for hiding the column based on data presence. Within the Expression Editor, enter the following expression, selecting the field that indicates the absence of data:

   ![image.png](https://support.boldreports.com/kb/attachment/article/12722/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3NTciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.zb7zduLkDMVEuvMdDY72fiCNRprhXFJgU-fVzWBNVsk)

    ```
        =IsNothing(<Your_field_name>)
    ```
    For example,
    ```
        =IsNothing(Fields!Clothing.Value)
    ```
4. Click on the OK option to save the Expression Editor. 
 
5. Save your report and proceed to preview it. Observe the visibility of the column, which will now adjust dynamically based on the availability of data.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12722/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3NTgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.iv2mh472B7ort5DsQ5Px-hDLxuZlH8eNvWOyuAkcnrY)

**Note:** The **IsNothing(Fields!Test_name3.Value)** expression evaluates to **True** when the field value is null or empty, and **False** when it contains data. By setting the Visibility property to **False**, the column will be hidden when the expression evaluates to **True**.
By following the steps outlined in this knowledge base article, you can easily hide a column dynamically in Bold Reports when the associated tablix contains no data. The utilization of the IsNothing() function within an expression provides you with the flexibility to control column visibility based on data presence. Implementing this technique enhances the visual appearance and usability of your Bold Reports projects.

 @(Embed){HideEmptyDataColumn.rdl}(https://support.boldreports.com/kb/attachment/article/12722/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3NTkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.iyp-IIfeXk2bMl2crUTC8f5HsHynxYkDFyEBSHWqAVk)

# How to Create a Multiple Column Report

A multiple column report is a type of report layout in which data is displayed in multiple sets of columns across the page. When the report is printed, the adjacent columns are printed until there is no more free space on a page. However, it is not possible to design a report with a multi-column layout on the top half and a table layout on the bottom half. To create a multiple column report, follow these steps:

1. Open the Bold Reports designer and create a new report. Add a database-connected data source and configure a new dataset based on that data source.

2. Add a new table report item to your report and configure it with the dataset. For example, we have added the tablix column within the report design, as shown in the following snap.
![Tabix.png](https://support.boldreports.com/kb/attachment/article/12723/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY1NTEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.KyuBeC0Lejxud58Myc33EN5w19WHeRnxH7PyaSNHwrQ)

3. In the report design view, open the **Report Properties** in the properties panel by clicking outside the design area. The multi-column properties are usually listed under the **Page Column** category in the properties list. In the `Columns` property, provide the number of columns in the report as shown in the following snap. 
![Pagecolumn.png](https://support.boldreports.com/kb/attachment/article/12723/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY1NTIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.q8YSCIWc0y6eeqrz34L86-IK40wk6RDj347Rn-IqVzE)

4. After designing the report, click on the `Preview` button. The report preview will now be displayed as a single column. To view the table in a multi-column layout, click the `Print Layout` option in the Report Viewer toolbar, as shown in the following screenshot.
![Output.png](https://support.boldreports.com/kb/attachment/article/12723/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY1NTQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.zT-3pV6FdZiSS3G1CchO0d8zn0He76eR5UPAmeHveTM)

# How to Add a Custom Button to the Report Viewer Toolbar

In Bold reports, customize the toolbar in the Report Viewer by adding a button with specific functionality. An example of this is adding an email button to the toolbar, which allows users to send the rendered report as an email attachment. To achieve this, you need to create the email button in the toolbar and implement the necessary code in both the client-side and server-side Web API services. Here are the steps you can follow:

## Add email button in Report Viewer

1. Create the email button option in the toolbar by using the [customItems](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/api-reference/properties/toolbarSettings/#customitems) property. Specify the necessary properties such as `groupIndex,` `index,` `itemType,` `cssClass,` `tooltip,` and the `toolBarItemClick` event handler. This event will be triggered when the button is clicked.

2. Access the Report Viewer model and create a JSON array for sending requests to the Web API server. Use the following codes for creating the event with a custom action. 

    ```js
        <script type="text/javascript">
            $(function () {
                $("#viewer").boldReportViewer({
                    reportServiceUrl: "/api/ReportViewer",
                    reportPath: 'sales-order-detail.rdl',
                    toolbarSettings: {
                        showToolbar: true,
                        customItems: [{
                            groupIndex: 1,
                            index: 1,
                            type: 'Default',
                            cssClass: "e-icon e-mail e-reportviewer-icon",
                            id: 'E-Mail',
                            tooltip: {
                                header: 'E-Mail',
                                content: 'Send rendered report as mail attachment'
                            }
                        }]
                    },
                    toolBarItemClick: 'ontoolBarItemClick'
                });
            });

            //Toolbar click event handler
            function ontoolBarItemClick(args) {
                if (args.value == "E-Mail") {
                    var proxy = $('#viewer').data('boldReportViewer');
                    var Report = proxy.model.reportPath;
                    var lastsIndex = Report.lastIndexOf("/");
                    var reportName = Report.substring(lastsIndex + 1);
                    var requrl = proxy.model.reportServiceUrl + '/SendEmail';
                    var _json = {
                        exportType: "PDF", reportViewerToken: proxy._reportViewerToken, ReportName: reportName
                    };
                    $.ajax({
                        type: "POST",
                        contentType: "application/json; charset=utf-8",
                        url: requrl,
                        data: JSON.stringify(_json),
                        dataType: "json",
                        crossDomain: true
                    })
                }
            }
        </script>
    ```

> Note: You need to change the `reportServiceUrl` and `reportPath.` To set up the `reportServiceUrl,` create a Web API service to process the report files in the Report Viewer. Refer to the ASP.NET Web API Service documentation [here](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/report-service/create-aspnet-web-api-service/).

## Creating a custom email action

1. Create a new method called `SendEmail` in the Web API service.
2. To send a report stream as an attachment, utilize the `ReportHelper.GetReport` method to export the report to the desired format.
3. The following code sample exports the report to a stream and sends it as an attachment to a specified email address. The `SmtpClient` sends the report as an email attachment.

    ```csharp
        public object SendEmail(Dictionary<string, object> jsonResult)
        {
            string _token = jsonResult["reportViewerToken"].ToString();
            var stream = ReportHelper.GetReport(_token, jsonResult["exportType"].ToString());
            stream.Position = 0;

            if (!ComposeEmail(stream, jsonResult["reportName"].ToString()))
            {
                return "Mail not sent !!!";
            }

            return "Mail Sent !!!";
        }

        public bool ComposeEmail(Stream stream, string reportName)
        {
            try
            {
                MailMessage mail = new MailMessage();
                SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
                mail.IsBodyHtml = true;
                mail.From = new MailAddress("xx@gmail.com");
                mail.To.Add("xx@gmail.com");
                mail.Subject = "Report Name : " + reportName;
                stream.Position = 0;

                if (stream != null)
                {
                    ContentType ct = new ContentType();
                    ct.Name = reportName + DateTime.Now.ToString() + ".pdf";
                    System.Net.Mail.Attachment attachment = new System.Net.Mail.Attachment(stream, ct);
                    mail.Attachments.Add(attachment);
                }

                SmtpServer.Port = 587;
                SmtpServer.Credentials = new System.Net.NetworkCredential("xx@gmail.com", "xx");
                SmtpServer.EnableSsl = true;
                SmtpServer.Send(mail);

                return true;
            }
            catch (Exception ex)
            {
                return ex.ToString();
            }

            return false;
        }
    ```

8. Kindly refer to the following output snapshot for your reference.
![Output.png](https://support.boldreports.com/kb/attachment/article/12725/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY0NzQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.FiuTMRM5BhO_fGufX9i0IPg6NPmnQPc-MXEsdz9C5gQ)

Find the following help documentation for creating a custom email button and sharing a report as an email attachment with other users on various platforms.

* [Angular](https://help.boldreports.com/embedded-reporting/angular-reporting/report-viewer/custom-actions/)

* [React](https://help.boldreports.com/embedded-reporting/react-reporting/report-viewer/custom-actions/)

* [Java Script](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/custom-actions/)

* [ASP.NET Core](https://help.boldreports.com/embedded-reporting/aspnet-core-reporting/report-viewer/custom-actions/)

* [ASP.NET MVC](https://help.boldreports.com/embedded-reporting/aspnet-mvc-reporting/report-viewer/custom-actions/)

* [ASP.NET Webforms](https://help.boldreports.com/embedded-reporting/aspnet-web-forms-reporting/report-viewer/custom-actions/)


# Verifying the Rendering of Bold Reports and SSRS Report Viewer: A Sample Code

Bold Reports is a comprehensive reporting solution that enables businesses to create visually appealing and interactive reports, dashboards, and data visualizations. Bold Reports can use SSRS (SQL Server Reporting Services) reports. Bold Reports supports the RDL (Report Definition Language) format, which is the same XML-based structure used by SSRS reports. This means that you can import and leverage existing SSRS reports within the Bold Reports platform.

To facilitate the comparison of both SSRS and Bold Reports previews on a single page, we have developed a sample application and attached it to this kb. This knowledge base article provides instructions for comparing the previews of SSRS and Bold Reports using a sample application.

1. Download and run the sample application provided in the attachment.
2. The application will direct you to the Login page.
   ![image.png](https://support.boldreports.com/kb/attachment/article/12726/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY1MzgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.g5sh1dOLsuue_wVjxFwtAv7Pri2G0Sav3Yp3vQ3nw60)
3. On the Login page, enter the SSRS server URL to retrieve the report from the SSRS. If you prefer using Windows credentials for login, you can enable the checkbox provided.
  ![image.png](https://support.boldreports.com/kb/attachment/article/12726/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY1MzkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.ry0j8oOOROM13RHwjMZY-21FfW4qCpmjJ6o26CRwrD8)

4. If you prefer to connect with a username and password, uncheck the checkbox and enter the appropriate login details to access your SSRS server and retrieve the reports.
   ![image.png](https://support.boldreports.com/kb/attachment/article/12726/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY1NDAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Iy6QPZKtL2-o3oCQy5QqOg33OAA7c3NxqbZ_I7NVEW8)

5. Select the desired report from the drop-down option.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12726/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY1NDEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.rSvha1z3ItsZjDLDZPbLmDm1ydLCNK_fRTQnsBDTLbY)
6. Click on the "View Report" button to render the report and compare the previews.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12726/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY1NDIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9._2bbQu0LOQFO_WUwf0yXFybk6EvCyjlZsVwDawNPvP8)

7. Analyze and compare the previews of the SSRS report and the Bold Reports rendition to gain a deeper understanding of their respective features and capabilities.
![image.png](https://support.boldreports.com/kb/attachment/article/12726/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY1MDIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.nd9zce15hZX2Zgj8dHmcZvM1GcSJm1V0m90r3Jsx32w)

By following these steps and using the sample application, you can easily compare the previews of SSRS and Bold Reports reports on a single page. This facilitates the evaluation and understanding of the features and capabilities offered by both reporting solutions.

 
 :::Info
Note: Ensure that you have the necessary permissions and access rights to retrieve SSRS reports and use Bold Reports for an accurate comparison.
 :::

# How to Use Subreport in Bold Reports Standalone Report Designer

In Bold Reports, a subreport is a report item that can be embedded within another parent report. It allows for the inclusion and integration of additional reports within the main report. Subreports can have their own data sources, parameters, and layout, providing a flexible way to present complex or related data. They enhance the overall functionality and presentation of reports by enabling modular design and the ability to display multiple reports within a single context.

To use a subreport in the Bold Reports Standalone Report Designer, follow these steps:

1. Drag and drop the subreport into the main report or insert it by right-clicking the report and selecting **Insert**.
     
      ![pic1.png](https://support.boldreports.com/kb/attachment/article/12727/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY0OTgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.MTTnACRzUmNBtwk1G9H-Vp9DS0eZpYRynqwb5J5mD7A)

2. Embed the subreport in the main report by entering the path of the subreport in the main report as shown in the following screenshot. The subreport path must be entered manually by copying and pasting it.
     
      ![pic2.png](https://support.boldreports.com/kb/attachment/article/12727/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY1MDMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.5n8To72-JcXjLsGp_wpAmqwTQ4bLlGw8q1l6Zl9Jquk)

     :::Info
     Use the full path of the subreport.
     :::

3. If you need to pass a parameter from the main report to the subreport, you must manually enter the parameter's name in the subreport to the main report.
     
      ![pic3.png](https://support.boldreports.com/kb/attachment/article/12727/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY1MDUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.jx6spFugLrBL3WfpJtZ8QOHY8z2Fp8ZhyTFnddJ3SiY)

     :::Info
     Enter the parameter name correctly as in the subreport. 
     :::

     ![pic4.png](https://support.boldreports.com/kb/attachment/article/12727/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY1MDYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.KKP4QcXjS3LrQr4kWMicdg5qQGhCYThnzC7Q4MldYkw)

 
 @(Embed){MainReport.rdl}(https://support.boldreports.com/kb/attachment/article/12727/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY1NjIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.WKo4SBjt7CZIfJI2uaIT6t-Sd_UMoxjFTYt2AxG1ONA)

 
 @(Embed){SubReport.rdl}(https://support.boldreports.com/kb/attachment/article/12727/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY1NjMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.81KKO9O4oYr6n67VXtaFbkJ1mZXT5VuSJdGDQJdyi5k)

# How to Generate the Authorization Token in JavaScript by Using the Embed Secret Key

To render the report in the report server configuration, the `serviceAuthorizationToken,` `reportPath,` and `reportServiceUrl` are required to embed the report viewer reports. Obtain this information from the report server. The authorization token for the user in Bold Reports can be generated using the Embed Secret Key. To do this, pass the following parameters in the request body:

   `username` - Email address of the user.

   `grant_type` - This credential is used to authorize the request for an access token. Valid values: **embed_secret**.

   `embed_nonce` - A random string value that restricts attackers from hacking. Example **5ff24040-cd74-42cf-a168-57f8cb7dafed**.

   `timestamp` - The current time as UNIX timestamp. Example: **1583934776**

   `embed_signature` -  By using the `username,` `embed_nonce,` `timestamp,` and the `embed secret key`(which can be generated from Bold Reports Reports server Embed settings) values, the `embed_signature` value can be generated using the `HMACSHA256` algorithm.

To generate an authorization token for JavaScript using the Embed Secret Key in Bold Reports, follow these steps:

1. Retrieve the Embed Secret Key by referring to this document [here](https://help.boldreports.com/enterprise-reporting/developer-guide/embed-in-application/iframe/embed-secret-key/#embed-report-using-embed-secret-key) and replacing `EMBED_SECRET_KEY` with the actual Embed Secret Key obtained from Bold Reports.

2. Change the user name and URL, and run the following code to generate the authorization using the Embed Secret Key.

```html
<html>

<head>  
   <title>Report Viewer first HTML page</title>
   <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>  
   <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.min.js"></script>
   <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/hmac-sha256.min.js"></script>
   <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/enc-base64.min.js"></script>
</head>

<body>  
   <div>
      <div>
         <button onclick="GetTokenWithEmbedSecreKey()">Generate_Token</button>
      </div> 

      <script type="text/javascript">              
         function GetTokenWithEmbedSecreKey(args) {
            var secretCode = "S0HvXs4TQpO9wFKtqtiwmyT5mVh8YVw";  // secret code generated under Embed settings 
            var userName = "guest@boldreports.com"; // email address of the user
            var reportServiceUrl = 'https://on-premise-demo.boldreports.com/reporting/api/site/site1/token'; //Bold Reports Server URL
            var timeStamp = DateTimeToUnixTimeStamp(Date.now()); // current time as UNIX time stamp
            var nonce = createGuid(); // random string
            var embedMessage = "embed_nonce=" + nonce + "&user_email=" + userName + "&timestamp=" + timeStamp;
            var signature = SignURL(embedMessage.toLowerCase(), secretCode);

            $.ajax({
               url: reportServiceUrl,
               dataType: 'json',
               type: 'post',
               contentType: 'application/json',
               data: JSON.stringify({ "grant_type":"embed_secret", "userName": userName, "Embed_Signature" : signature,
                  "Embed_Nonce" : nonce, "timeStamp": timeStamp }),
               processData: false,
               success: function( data, Status){
                  $('#response').html( JSON.stringify( data ) );
                  document.write("Token generated by embed secret key  :\n" + data.access_token);
               },
               error: function(Status, errorThrown ){
                  document.write( errorThrown );
               }
            });
         }

         function SignURL(embedMessage, secretcode){
            var hash = CryptoJS.HmacSHA256(embedMessage, secretcode);
            var hashInBase64 = CryptoJS.enc.Base64.stringify(hash);
            return hashInBase64;
         }
           
         function DateTimeToUnixTimeStamp(date){
            var unixTimeStampInSeconds  =  Math.floor(date / 1000);
            return unixTimeStampInSeconds;
         }

         function createGuid(){  
            function generateGuid() {  
               return (((1+Math.random())*0x10000)|0).toString(16).substring(1);  
            }  
            return (generateGuid() + generateGuid() + "-" + generateGuid() + "-4" + generateGuid().substr(0,3) + "-" + generateGuid() + "-" +
               generateGuid() + generateGuid() + generateGuid()).toLowerCase();  
         } 

        </script>
    </div>
</body>

</html>
```

3. Kindly refer to the following screenshot of the output for your reference.
![Output.png](https://support.boldreports.com/kb/attachment/article/12728/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY1NjUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.BgDW7H0dF6JGsK_oThS9XC5eq1lFm6MpDhMtO2rg22c)

## See Also
* [Report from Enterprise Reporting Server](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/reportserver-report/#enterprise-reporting-report-server)

# Adding Localization for Bold Report Viewer in Blazor Application

In Bold Reports report viewer, we have the ability to localize the static text, such as tooltips, parameter blocks, and dialog text, and also change the culture for a more customized experience. By referring to the corresponding culture script files and setting the culture name to the [locale](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/api-reference/members/#locale) property of the Report Viewer, we can seamlessly render the static text in a specific culture. This localization feature allows us to adapt the report viewer to different languages and cultural contexts, providing a more user-friendly and inclusive interface. With the added capability to change the culture, Bold Reports report viewer offers a comprehensive solution for catering to diverse user needs and enhancing the overall accessibility of the application.

Refer to this [CDN links for Localization and Culture](https://help.boldreports.com/embedded-reporting/faq/cdn-links-for-localization-and-culture-scripts/) to get the Localization and Culture scripts for available Culture Code.

Please follow the below steps to add localization for the bold report viewer in the Blazor application:
1. Refer to the corresponding culture scripts files **ej.localetexts.fr-FR.min.js** and **ej.culture.fr-FR.min.js** in your **_Layout.cshtml** file in your blazor application.
    ```js
        <script src=https://cdn.boldreports.com/5.1.20/scripts/l10n/ej.localetexts.fr-FR.min.js></script> 
        <script src=https://cdn.boldreports.com/5.1.20/scripts/i18n/ej.culture.fr-FR.min.js></script>
   ```
2. Pass the values for the **locale** property in the **index.razor** page.
    ```js
        @code {
              // ReportViewer options.
              BoldReportViewerOptions viewerOptions = new BoldReportViewerOptions();
              // Used to render the Bold Report Viewer component on the Blazor page.
              public async void RenderReportViewer()
              {
                viewerOptions.ReportName = "sales-order-detail";
                viewerOptions.ServiceURL = "/api/BoldReportsAPI";
                viewerOptions.Locale = "fr-FR";
                await JSRuntime.InvokeVoidAsync("BoldReports.RenderViewer", "report-viewer", viewerOptions);
              }
              // Initial rendering of Bold Report Viewer.
              protected override void OnAfterRender(bool firstRender)
              {
                RenderReportViewer();
              }
              
              public class BoldReportViewerOptions
              {
                public string ReportName { get; set; }
                public string ServiceURL { get; set; }
                public string Locale { get; set; }
              }
            }
    ```
4. Set the culture name using the **locale** property in **the boldreports-interop.js** file in your Blazor application.
    ```js
         // Interop file to render the Bold Report Viewer component with properties.
         window.BoldReports = {
         RenderViewer: function (elementID, reportViewerOptions) {
         $("#" + elementID).boldReportViewer({
            reportPath: reportViewerOptions.reportName,
            reportServiceUrl: reportViewerOptions.serviceURL,
            locale: reportViewerOptions.locale
                 });
             }
         }
    ```
5. Save the changes and build and run the application. Now, the localization will be changed to "fr-FR" culture as follows.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12730/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY1MTYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.OZDlUO_7kLw4vsI7tAlqZFe2S0vW-fdrTlMBMPe4bNI)

Remember to adjust the version numbers in the CDN links if you are using a different version of Bold Reports. For more information on available culture codes and localization, refer to the [CDN links for Localization and Culture page](https://help.boldreports.com/embedded-reporting/faq/cdn-links-for-localization-and-culture-scripts/).


# How to Create Time-based Date Filters in Bold Reports

You do not have predefined options for selecting the current week, previous week, current month, previous month, current year, or previous year in Bold Reports. However, you can fulfill this requirement by utilizing Date Filters and expressions for time-based filtering in Bold Reports. These features allow users to define specific date ranges for filtering data. Date filters are employed to filter data based on specific dates or date ranges. They can be applied in a report or utilized to create a custom report that displays data only for a specific time period. On the other hand, expressions are utilized for creating customized calculations and formatting data. They enable the addition of new fields, modification of data display, and creation of custom calculations in a report. The following examples showcase how to implement various time-based filters using expressions.
To use date filters and expressions in Bold Reports, you will need to create a parameter for the date or date range that you want to filter by. You can then use the expression to filter the data in the report.

**Getting the Today:**
To get data for the today, you can use the following expression:
```
=Today()
```

**Getting the Yesterday:**
To get data for the yesterday, you can use the following expression:
```
=DateAdd("d", -1, Today())
```

**Getting the Last Seven Days:**
To get data for the last seven days, you can use the following expression:
```
=DateAdd("d", -7, Today())
```

**Getting the Last 30 Days:**
To get data for the last seven days, you can use the following expression:
```
=DateAdd("d", -30, Today())
```
**Current Month First Date:**
To get data for the first date of the current month, you can use the following expression:
```
=DateAdd("m", 0, DateSerial(year(Today), month(Today), 1))
```

**Current Month Last Date:**
To get data for the last date of the current month, you can use the following expression:
```
=DateSerial(Year(Today), Month(Today) + 1, 0)
```

**Last Month First Date:**
To get data for the first date of the previous month, you can use the following expression:
```
=DateAdd("m", -1, DateSerial(year(Today), month(Today), 1))
```

**Last Month Last Date:**
To get data for the last date of the previous month, you can use the following expression:
```
=DateAdd("m", 0, DateSerial(year(Today), month(Today), 0))
```

**Current Year First Date:**
To get data for the first date of the current year, you can use the following expression:
```
=DateSerial(Year(Today), 1, 1)
```

**Current Year Last Date:**
To get data for the last date of the current year, you can use the following expression:
```
=DateSerial(Year(Today), 12, 31)
```

**Last Year First Date:**
To get data for the first date of the previous year, you can use the following expression:
```
=DateAdd("yyyy", -1, DateSerial(year(Today), 1, 1))
```

**Last Year Last Date:**
To get data for the last date of the previous year, you can use the following expression:
```
=DateAdd("d", -1, DateSerial(year(Today), 1, 1))
```

By incorporating these expressions into your reports, you can effectively filter data based on specific time periods, such as today, yesterday, the last seven days, last thirty days, current month, or previous month, current year, or previous year. Follow the below steps for how to use it reports.

1. Create a parameter "**DateFilterParam**" of type "**DateTime**" and specify the available values as in the following snap.
![image.png](https://support.boldreports.com/kb/attachment/article/12749/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjM0MjUxIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.jxgGa8LCUr5Ey6pLZN-Ka8bjXmARKpav_naqXfdVYsA)

  ![image.png](https://support.boldreports.com/kb/attachment/article/12749/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcwMDYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.mYwAhVDGAAZeXlBKFdJIrfqXHh3zkSq-V4FEFewXM3c)

3. Drag and drop a text-boxes for **StartDate**and **EndDate** and set the following expressions in it.
    **StartDate:**
![image.png](https://support.boldreports.com/kb/attachment/article/12749/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjM0MjcwIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.mxczHR3Z1qYJKZszLTa4mjorWbA1yeQgNjQK59uFm-8)
 (https://support.boldreports.com/kb/attachment/article/12749/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcwMDciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.RcjPwb-HFv-PhLjN6ZGPIFcTuoobEdGUNintp3ck-WA)


```
=Switch(Parameters!DateFilterParam.Value = "Today", Today(),
Parameters!DateFilterParam.Value = "Yesterday", DateAdd("d", -1, Today()),
Parameters!DateFilterParam.Value = "Last 7 Days", DateAdd("d", -7, Today()),
Parameters!DateFilterParam.Value = "Last 30 Days", DateAdd("d", -30, Today()),
Parameters!DateFilterParam.Value = "This Month", DateAdd("m", 0, DateSerial(year(Today), month(Today), 1)),
Parameters!DateFilterParam.Value = "Last Month", DateAdd("m", -1, DateSerial(year(Today), month(Today), 1)),
Parameters!DateFilterParam.Value = "This Year", DateSerial(Year(Today), 1, 1),
Parameters!DateFilterParam.Value = "Last Year", DateAdd("yyyy", -1, DateSerial(year(Today), 1, 1))
)
```

  **EndDate:**

![image.png](https://support.boldreports.com/kb/attachment/article/12749/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjM0MjcxIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.3jutGALEY2rlLXlvn9BnDQtkPUeb2LVBObTAWSqEVLk)
    ![image.png](https://support.boldreports.com/kb/attachment/article/12749/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcwMDgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.eqaUvVfZqToANTqAw7dGbeyrM5E1Qum4eujDobZ5Cbo)

```
=Switch(Parameters!DateFilterParam.Value = "Today", Today(),
    Parameters!DateFilterParam.Value = "Yesterday", DateAdd("d", -1, Today()),
    Parameters!DateFilterParam.Value = "Last 7 Days", Today(),
    Parameters!DateFilterParam.Value = "Last 30 Days", Today(),
    Parameters!DateFilterParam.Value = "This Month", DateAdd("m", 1, DateSerial(year(Today), month(Today), 0)),
    Parameters!DateFilterParam.Value = "Last Month", DateAdd("m", 0, DateSerial(year(Today), month(Today), 0)),
    Parameters!DateFilterParam.Value = "This Year", DateSerial(Year(Today), 12, 31),
    Parameters!DateFilterParam.Value = "Last Year", DateAdd("d", -1, DateSerial(year(Today), 1, 1))
    )
```

3. Now, select the parameter value to set the range and preview the report. By utilizing these date filters and expressions, you can enhance your reporting capabilities and retrieve data based on custom time ranges.
![image.png](https://support.boldreports.com/kb/attachment/article/12749/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjM0Mjc1Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.IWpfc8-jgL3CHkhpFeIu9mjkJizNzTP8MeSvPOrMG2k)
![image.png](https://support.boldreports.com/kb/attachment/article/12749/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcwMDkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.-GMG_fQJXYgAluWg0KMbZQ9MrqsG7wD_j5z8vCSNHlQ)
![image.png](https://support.boldreports.com/kb/attachment/article/12749/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjM0Mjc2Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.Z2hXdL1qgWSrVXyhkVRa51sXSaka31UfelBPyY9SwnQ)
![image.png](https://support.boldreports.com/kb/attachment/article/12749/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcwMTAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.NwMhiudZZD8Olrktc1GNhYf2yAYDFgH7si6vk3bDuN4)
 
  @(Embed){DateFilters.rdl}(https://support.boldreports.com/kb/attachment/article/12749/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcwMTIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.SQ-uDkrXU0TyucXUc1uCrfvbsGX9VAZqY-bYcWFcDfE)

# How to Set Print Mode as Default in a Blazor Application

By default, Bold Reports renders reports in a normal layout. However, if you desire a print layout as the default option for your reports, you can easily make the switch with Bold Reports.

Bold Reports offers a seamless solution to change the default layout, allowing you to showcase your reports in a print-ready format right from the start. With its advanced features and intuitive interface, Bold Reports empowers you to effortlessly elevate your report printing experience.

To configure the default print layout in a Blazor application with Bold Reports, follow the steps below:


1. Include the boolean property **PrintMode** in the **BoldReportViewerOptions** class. This property allows you to control the print layout settings.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12753/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcyNzYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.BSlDmbXzEl41BihdpIg024OypZLlgN3WxqGB6SjJDw8)

2. In the `Index.razor` page, set the value of the **PrintMode** property to **true**. This enables the print layout as the default mode for viewing reports.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12753/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcyNzciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.nc18IC5_G8kb3qKibMkKQ4n-VsGITg5Xb0zYDcCY_8U)

3. Open the `boldreports-interop.js` file and set the value of the **printMode**  to **reportViewerOptions.printMode**. This ensures that the print layout is set as the default mode in the Blazor application.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12753/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcyNzgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.cpl8TDKJ263IHwtNmdl6LWjIFkpt8uI1uOmvnbYxgBA)

4. Save the changes and run the application.

5. The report will now be displayed in print mode by default.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12753/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY2MDgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.KhHM3uCAwnqrpU1uoqNEvNwAsHCSi1vMc_2IT8VRThk)

By following the steps outlined in this KB article, you can easily set the print layout as the default mode for viewing reports in your Blazor application with Bold Reports.

# How to Change the Header Name in a CSV Export

When exporting reports in CSV format, there is a common behavior that automatically uses the text box name of the details row as the header for the CSV header. However, it is important to note that this behavior can lead to inaccurate values displayed in the CSV header. You can modify the CSV header behavior by following the steps below:



1. Select the cell in the Tablix detailed row that corresponds to the header.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12757/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY2MjgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.7UNkpnM5Skw-mDx_aOd6eo6XYqJq4GmliqGHYzAK8pg)
2. Update the value of the cell to match the desired header row value.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12757/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY2MjkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.xS4thEA8YYAlX6RtKfn3w1ASvzMKwNX_57oMd-nfYZ0)
3. Alternatively, you can set the value for the Data Element associated with the details row to achieve the desired behavior.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12757/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY2MzAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Y0D7p8j93GSkzi8nZKgNqWr3aYpGvqh5mahAzN8Z7lc)
4. Export the report to CSV and verify that the changes have been applied correctly.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12757/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY2MzIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.ZF7zu5gcM3lF96X6m2EGRDYilPKjDhsgUqXk8IaU5u8)

By following these steps, the CSV export will use the details row's text box name value as the header, ensuring the correct values are displayed in the CSV header.

# How to Create Report with One Record Per Page

Bold Reports offers a feature that allows you to display one record per page, which can be particularly useful when you want to showcase individual person records. This feature enhances readability and facilitates better understanding of the information presented. 

###### Display One Record Per Page by using Tablix

1. Create a Report, drag and drop a **List** report item in it, and choose the **dataset**.
 
      ![Pic1.png](https://support.boldreports.com/kb/attachment/article/12762/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY4MDAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.WOKhMcy692-zWEMoDLsZBmxQdVQoHQHumOxrTAQTZ-k)

2. Then select the List **Details** group, and change the **Break Location** value into **Between**  in the **Page Break** section.
 
      ![Pic2.png](https://support.boldreports.com/kb/attachment/article/12762/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY4MDEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.co4soW4uP0OZkKjbTc28WROIInf5uQTLktUnQaWpFU8)

3. **Insert** a Tablix or any report item inside the **List** report item.
 
      ![Pic3.png](https://support.boldreports.com/kb/attachment/article/12762/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY4MDIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.5jrAFh0pN9ZobGPSaceCWF7HG6y56maaX65vg_w0Ky8)

4. Then run the report. Each record will display in separate page.
 
      ![Pic4.png](https://support.boldreports.com/kb/attachment/article/12762/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY4MDMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.LIFG7ltW6TaudY948Fx4TnSB8l6jkuj7E3yKYOPiA1E)

5. The sample report is attached for your reference.
 
      @(Embed){OneRecordPerPage.rdl}(https://support.boldreports.com/kb/attachment/article/12762/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY4MDQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.WxEJ9MkwSREIX_cLAQzBpzJ5M_r512l_YiWzo7MGwwI)


###### Display One Record Per Page by using Subreport

1. Create a **subreport** that needs to display all the records. In the following example, a Tablix is created with a parameter that filters and displays the records based on the selected parameter.
     
      ![Pic1.png](https://support.boldreports.com/kb/attachment/article/12762/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY2MzgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.EPVQYcF89KnATML7goKgWYbJy3IRzeI4_8PltBRJRuk)

 
      ![Pic2.png](https://support.boldreports.com/kb/attachment/article/12762/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY2MzkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.cG1edj1M5E0hCIsvlrUQuCfrCyGoDjyImdG9hhM0pj0)

2. Then create a **main report**, drag and drop a **List** report item in it, and choose the dataset.
     
      ![Pic3.png](https://support.boldreports.com/kb/attachment/article/12762/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY2NDAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.uq31SwAY_z_owpuTQPbraANWRbJ_q7QU4lbS7j9pJ9M)

3. Drag and drop the **subreport** report item inside the **List**, then choose the subreport.
     
      ![Pic4.png](https://support.boldreports.com/kb/attachment/article/12762/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY2NDIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.O8y1VpsIgElEVoAfbPyuvRZzb80LBqiczSzNLuxk9mE)

4. Set parameter for the subreport.
     
      ![Pic5.png](https://support.boldreports.com/kb/attachment/article/12762/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY2NDMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.a61sBbrMcGiDvDHrioXhZ4jcrfbq5Bwg_nkBYH5cf6k)

5. Then set the page break, break location as **Between** for the Details row.
     
      ![Pic6.png](https://support.boldreports.com/kb/attachment/article/12762/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY2NDUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.plDuRi1nEsgarPQgWZrbWocApZtEeroqpbthryEVSZI) 

6. Then each record will show in a separate page.
 
      ![Pic7.png](https://support.boldreports.com/kb/attachment/article/12762/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY2NDgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.GH4hOr9sdgJkcTVsJKM2VThA-ilWIBm8NbhEPpWZhDU) 

7. The sample report is attached for your reference.

     @(Embed){MainReport.rdl}(https://support.boldreports.com/kb/attachment/article/12762/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY2NDkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.eYvzqhRHgEMh4V9qHiIo8KONLV02Uce0JkBQjRnagIs)

 
     @(Embed){SubReport.rdl}(https://support.boldreports.com/kb/attachment/article/12762/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY2NTAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.EXBUAlC9cQcnlfU_XTLSzaxeRzzqSwy7GXGd5jzXBWg)

# How to Customize Excel Sheet Names in Bold Reports

Bold Reports offers the ability to customize the names of Excel sheets instead of using the default name **"Sheet1"**. This customization feature enhances readability and allows users to provide more descriptive and meaningful names for the sheets in the Excel export.

###### Customize the name of an Excel sheet for the entire Tablix

1. Select the **Tablix** for which you want to customize the name.
         
      ![Pic1.png](https://support.boldreports.com/kb/attachment/article/12770/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY2OTAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.ePhxfpeFf97XjCJwh7BHhRj8Us181eJE3pA4JIDjhN0)

2. In the **Miscellaneous** section, enter the desired name in the **"Page Name"** field.
 
      ![Pic2.png](https://support.boldreports.com/kb/attachment/article/12770/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY2OTEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.YmVOpZPpTtsgSwSKmEzpKZa-edFyeVPTHGJKpHfTxoE)

3. Run the report and export it to excel. Please find the difference in the following picture.
  
   ![Pic3.png](https://support.boldreports.com/kb/attachment/article/12770/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY2OTUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.bHqFIKa3TppBtSoWnUABih-zCnVLe1fJwarSRKLXY2k)

###### Customize the name of an Excel sheet for Each group in Tablix

1. Select the **Tablix group** which you want to customize the name.
      
      ![Pic1.png](https://support.boldreports.com/kb/attachment/article/12770/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3OTUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.bnA6reJJIc6yGOj8NV2Y3cf3-ODMvkg-NBENq39-Anc)

2. In the **Miscellaneous** section, enter the **Page Name**.
 
      ![Pic2.png](https://support.boldreports.com/kb/attachment/article/12770/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3OTYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.0nYYHNTF5SkOIR5mOwvYmCZa98oiSwcv9cGA2pe1E0g)
 
   :::Info
   In the Page Name, the group field name is used, which dynamically changes for each group.
   :::

3. In the **Page Break** section, change the **Break Location** to **Between**.
 
      ![Pic3.png](https://support.boldreports.com/kb/attachment/article/12770/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3OTciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.YGafZyr2nkvt0kGl2mtT9GsBc2n-WKQra32jP235Pjk)

4. Run the report and export it to excel. Please find the difference in the following picture.
 
      ![Pic4.png](https://support.boldreports.com/kb/attachment/article/12770/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3OTgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.TuAj0hdbkdac5L1eGc8ZJci4bPJNjgz6p4kBSd6s0QY)



Please find the sample reports below,

 
 @(Embed){EntireTablix.rdl}(https://support.boldreports.com/kb/attachment/article/12770/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY5MjUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.7SPi2m3F-Y6DudCo-nJpS_UbvglMvg_PoBrSlTJ-tkc)

 
 @(Embed){EachGroup.rdl}(https://support.boldreports.com/kb/attachment/article/12770/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY5MjYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.osAcjXrG1qZQEvWuqR7RaD6DLhHsygqEDoCQhI5NLkk)

# How to Load Drillthrough Reports in a Report Viewer Application

Drill-through actions cover the concept of calling another report within the main report by clicking on an object. This action opens a separate report known as a drill-through report.

To change the drill-through report file path in the application and set the Stream property for a drill-through report in the OnInitReportOptions method.  
The following code example demonstrates how to load a drill-through in the Report Viewer on the server side.

**Code Example:**

```csharp
public void OnInitReportOptions(ReportViewerOptions reportOption)
        {
            string basePath = _hostingEnvironment.WebRootPath;

            if (reportOption.ReportModel.IsDrillthroughReport)
            {
                FileStream inputDrillthroughStream = new FileStream(basePath + @"\Resources\" + reportOption.ReportModel.ReportPath, FileMode.Open, FileAccess.Read);
                MemoryStream DrillthroughStream = new MemoryStream();
                inputDrillthroughStream.CopyTo(DrillthroughStream);
                DrillthroughStream.Position = 0;
                inputDrillthroughStream.Close();
                reportOption.ReportModel.Stream = DrillthroughStream;
            }
            else
            {
                FileStream inputStream = new FileStream(basePath + @"\Resources\" + reportOption.ReportModel.ReportPath, FileMode.Open, FileAccess.Read);
                MemoryStream reportStream = new MemoryStream();
                inputStream.CopyTo(reportStream);
                reportStream.Position = 0;
                inputStream.Close();
                reportOption.ReportModel.Stream = reportStream;
            }
        }
```

For further reference, kindly refer to the attached sample application.

# How to Use the Month Picker Parameter in Bold Reports

As per the RDL standard, we don't have the option to create the month picker parameter. However, Bold Reports addresses the user demand for month picker parameters by offering support for selecting a specific month only. This can be accomplished by incorporating custom properties into your report. To achieve the desired month and year format in the DateTime Picker, please follow the steps outlined below.

1. Open your report in the BoldReports. Click on the grey area in your report and navigate to custom properties in the properties panel. 
   ![image.png](https://support.boldreports.com/kb/attachment/article/12793/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcxODIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.dYOvXI1VGSGxLK-9eGJpoCypH72YS93LVZfsXfOygCI)
2. Set the following three custom properties in your report in the report designer tool. These properties are crucial for configuring the DateTime Picker parameters:
    ![image.png](https://support.boldreports.com/kb/attachment/article/12793/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcxODYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.c7DUNX_obXQ0IIP_66HKyaSGz1mBYGU06bYDqpulrYY)

    ‘**DateStartLevel**’ to ‘**year**’

    ‘**DateDepthLevel**’ to ‘**year**’

    ‘**DateTimeFormat**’ to ‘**MMMM yyyy**’

3. Apply the changes to the customer properties by saving the report. Then, preview the designed report in your embedded application to view the updated DateTime Picker format.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12793/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcxODQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.3Pp0w3Towx7o9KRIb8FwXaUEBk_QOGlCZCCKc8q5AUg)
    ![image.png](https://support.boldreports.com/kb/attachment/article/12793/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcxODUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.W_EmPEfJkwoOq2w4txVAZW6SxcLjkQXNxEuatJaM8G8)

By following the instructions provided in this knowledge base article, you can easily configure the DateTime Picker in the BoldReports to display the format of month and year. By setting the '**DateStartLevel**' and '**DateDepthLevel**' properties to '**year**' and the '**DateTimeFormat**' property to '**MMMM yyyy**,' you can achieve the desired result. Make sure you have upgraded to BoldReports version **5.1.22** or later before attempting these configurations.

**Note:** The ability to change the DateTime Picker parameters' format to month and year was introduced in the BoldReports version 5.1.22. Ensure that you have upgraded your Nuget packages and scripts to this version or a later version to access this feature.

# How to Convert Unix Epoch Timestamps to Readable Formats in Bold Reports

Converting the Unix Epoch timestamps into human-readable date and time formats is a common requirement when working with time-based data in Bold Reports. The Unix Epoch timestamps represent the number of seconds that have elapsed since the Unix epoch, which serves as a reference point for time measurement. This comprehensive guide will walk you through the process of converting the Unix Epoch timestamps to easily understandable formats in Bold Reports.


Use the following expressions to convert the Unix timestamps to readable formats in Bold Reports:

**Unix timestamps values in seconds:**
 
 ```vb
=Format(DateAdd("s", 1684153114, "01/01/1970"), "MM/dd/yyyy HH:mm:ss")
 ```

 
 ```vb
=Format(DateAdd("s", Fields!timestamp.Value, "01/01/1970"), "MM/dd/yyyy HH:mm:ss")
 ```
 
 **Unix timestamps values in milliseconds:**

 ```vb
=Format(DateAdd("s", 1684153114352/1000, "01/01/1970"), "MM/dd/yyyy HH:mm:ss")
 ```

 
```vb
=Format(DateAdd("s", Fields!timestamp.Value/1000, "01/01/1970"), "MM/dd/yyyy HH:mm:ss")
 ``` 

Optionally, provide additional information about the time format:

**To display the time in a 24-hour format, use the expression:**

 ```vb
=Format(DateAdd("s", Fields!timestamp.Value/1000, "01/01/1970"), "MM/dd/yyyy HH:mm:ss")
 ```

**To display the time in a 12-hour format, use the expression:**

 ```vb
=Format(DateAdd("s", Fields!timestamp.Value/1000, "01/01/1970"), "MM/dd/yyyy hh:mm:ss tt")
 ```

 
 :::Info
**Note:** The choice of January 1, 1970, as the Unix epoch holds historical significance. It was selected during the development of the Unix operating system in the 1960s and 1970s. Designating January 1, 1970, as the starting point of the Unix epoch allowed for positive and negative timestamps, and it was a widely accepted reference point within the Unix community. Since then, the Unix epoch has become a widely adopted standard for representing time in various computer systems and programming languages, ensuring consistency and interoperability in time-related operations.
 :::

Find the sample report below:
 
 @(Embed){Unix Epoch.rdl}(https://support.boldreports.com/kb/attachment/article/12826/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY5MjQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.AY3vI7_eG6tx_Npfwie6TLF6LGIiQr5hdueGXNSxrOE)

# How Can I Use the Report Designer to Edit Existing Reports in Bold Reports Report Server?

You can open an existing report from the server when initializing the Bold Reports Designer by using the **create** API event and **openReport** method. This can be used as an alternative solution for the Template report. You can open the previously created report design as a template report.

Follow the below steps to open the server report using the report path on opening Report Designer:

1. Create a function and bind it with the **create** API Event in the **Index.html** file as in the following code sample.

 ```html
<bold-report-designer id="designer" create="controlInitialized"></bold-report-designer>

<script type="text/javascript">
function controlInitialized(args) {
         ...
        }
</script>
 ```
 
 :::Info
**Note:* The **controlInitialized()** function was bound with **create** API.
 :::

2. Use the **openReport** API method in the function along with the **report path** that was previously created, as in the following code sample. 

 ```ts
     function controlInitialized(args) {
         var designer = $('#designer').data('boldReportDesigner');
         designer.openReport("/Sample Reports/Company Sales");
        }
    }
 ``` 

 
 :::Info
**Note:** In this example, **"Sample Reports"** is the category name and **"Company Sales"** is the report name that we passed in the **openReport** API method as part of the report path.
 :::
 
3. Then, when accessing the Bold Report Designer, the report that is bound to the specified path will open.


You can find the following help documentation on how to open an existing server report in Bold Reports Designer on various platforms:

* [ASP.NET CORE](https://help.boldreports.com/embedded-reporting/aspnet-core-reporting/report-designer/how-to/open-server-report-using-report-path-on-opening-designer/)
* [ASP.NET MVC](https://help.boldreports.com/embedded-reporting/aspnet-mvc-reporting/report-designer/how-to/open-server-report-using-report-path-on-opening-designer/)
* [ASP.NET Web Forms](https://help.boldreports.com/embedded-reporting/aspnet-web-forms-reporting/report-designer/how-to/open-server-report-using-report-path-on-opening-designer/)
* [React](https://help.boldreports.com/embedded-reporting/react-reporting/report-designer/how-to/open-server-report-using-report-path-on-opening-designer/)
* [JavaScript](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-designer/how-to/open-server-report-using-report-path-on-opening-designer/)

# How to Customize Report Items Based on RenderFormat in Bold Reports

RenderFormat in Bold Reports plays a crucial role in determining how reports are presented and delivered to users. It refers to the various output formats or file types in which reports can be rendered, such as PDF, Excel, Word, HTML, and more.

Conditional formatting further enhances the visual presentation of reports by allowing you to dynamically modify the appearance of report elements based on specific conditions. With Bold Reports, you have the flexibility to apply conditional formatting rules across different RenderFormats. This means that you can control the visibility, color, size, and other properties of report items in different formats, such as PDF, Excel, and Word.

**Expression:* The following expression is used to find the rendering format of a report.
 
 ```vb
= Globals!RenderFormat.Name 
 ```

Please find the available RenderFormat in the following Bold Reports:
* RPL (Report Page Layout)
* IMAGE (Report Print Layout)
* PDF
* EXCEL
* WORD
* HTML
* PPT
* CSV
* XML

In the following example, we have demonstrated the difference between the Page Layout and Print Layout of the same report. Similarly, in all exports, the values change accordingly.

 ![Rendering_Format.png](https://support.boldreports.com/kb/attachment/article/12833/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc4NDUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.YPgZCYnqh3LsgzBy9own7_3-_tNTGa780PbDyaIIzj4)

 
 :::Info
**Note:** In the above example, we have modified the background color, font weight, and visibility of an image and text box based on the rendering format.
 :::

In the following snapshot, we demonstrate how to utilize the render format expression in the visibility property of an image report item.
 
 ![Rendering_Format1.png](https://support.boldreports.com/kb/attachment/article/12833/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc4NDciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.CIXN4L7mdhVzuj5-nS4lH3XzkKnuPtMw1q4b3iEb8bI)

Please find the Sample report below:
 
 @(Embed){Rendering_Format.rdl}(https://support.boldreports.com/kb/attachment/article/12833/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc4NDYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.S9Bm3g1QC6J--e647BJb0zPS5l7fj5GwumiujiXfdwY)

# How to Remove the Grey Area in the Report Viewer

The grey area in a report viewer typically refers to the background or surrounding space of the report content. It is often used to create a clear distinction between the report itself and the surrounding interface elements. The purpose of the grey area is to provide a visual separation, helping to focus the user's attention on the report content by minimizing distractions from the rest of the interface.

Box shadow is a visual effect applied to an element, such as a container or a box, within the report viewer. It creates the illusion of depth and adds a subtle visual highlight to the element. The box shadow effect is achieved by creating a shadow that appears behind and around the edges of the element, simulating the appearance of a raised or floating object.

Overall, both the grey area and box shadow contribute to the aesthetics and usability of a report viewer. The grey area helps to isolate the report content from the rest of the interface. At the same time, the box shadow effect adds visual depth and hierarchy to various elements, improving the overall user experience.

### Remove the box shadow in the report viewer

The box shadow in the report viewer is the shadow that appears around the report area. You can remove the box shadow using CSS (Cascading Style Sheets) in your application. Follow these steps:

1. Add the following CSS code within the  **.e-reportviewer-pageview** selector:

    ```css   
        .e-reportviewer-pageview
        {
            box-shadow: 0 0 0px 0px rgb(0 0 0 / 16%);
        }
    ```   

2. This CSS code removes the box shadow from the report viewer, making it visually flat.

3. By making this change, you can remove the box shadow from the Report Viewer in Bold Reports. Refer to the following image for a visual representation.
![Shadow.png](https://support.boldreports.com/kb/attachment/article/12838/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc3OTMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.LvMgAnN4W9xfxI72nSPTqdBv-AcSuZq5HHOrfeRo0Sg)

### Remove the grey area in the report viewer

You can remove the grey area by setting the report area to white. However, you can change the background color of the report viewer to match the report background color by using CSS (Cascading Style Sheets) in your application. Follow these steps:

1. Add the following CSS code within the  **.e-reportviewer-pageviewcontainer** selector.

    ```css
        .e-reportviewer-pageviewcontainer {
            background-color: white;
        }
    ```   

2. This CSS code sets the background color of the report viewer's page view container to white, effectively removing the grey area.

3. By making this change, you can remove the grey area from the Report Viewer in Bold Reports. Refer to the following image for a visual representation.
![Output.png](https://support.boldreports.com/kb/attachment/article/12838/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg0NDciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.CanYtLCIwCWAmx9JvPJVacrAn_dyACZJIMdi_Nzs8KU)

# UTCNow Timestamp Format and Conversion Expression

In Bold Reports, there is an option to include a UTC (Coordinated Universal Time) timestamp. UTC is a global standard time reference used across different time zones, ensuring consistency in time representation. By incorporating a UTC timestamp, synchronize and compare time data accurately, making it particularly useful for applications that involve multiple geographical locations. A particular timezone(IST) is converted to UTC timezone also.

Use the following expressions and formatting options to add a UTC timestamp to your report.

1. **Getting the UTC time:**
 To get the current UTC time, use the following expression:
    ![image.png](https://support.boldreports.com/kb/attachment/article/12844/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcwMTciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.kqiehjwzYy2LvKCBNgtMKqZ6GQiLxpph4LcKzK7ONBQ)
    ![image.png](https://support.boldreports.com/kb/attachment/article/12844/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcwMTgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.hgH1r21pIcTGwdNr_LbrWVBmfZxCly7Q-eKf1BIPmag)
    ```
    =Now.ToUniversalTime()
    ```
2. **Formatting the UTC time:**
To format the UTC time in a specific way, use the **Format** function. The following example demonstrates formatting the UTC time as "**yyyy-MM-dd HH:mm:ss UTC**":
    ![image.png](https://support.boldreports.com/kb/attachment/article/12844/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcwMTUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.jxiGX7mzKi8wu5b9BGgvvk6iC9m94AqziXVt-MwWpT0)
    ![image.png](https://support.boldreports.com/kb/attachment/article/12844/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcwMTYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.NsXElYY_6Xisl6vEErbXeNY_i4A9ANPsw9fVspzuQVI)
    ```
    =Format(Now.ToUniversalTime(), "yyyy-MM-dd HH:mm:ss UTC")
    ```
    
3. **Convert IST timezone to UTC timezone:**
To convert the IST timezone to UTC timezone, add the following code in [code modules](https://help.boldreports.com/standalone-report-designer/designer-guide/compose-report/code-module/) and convert it. Follow these steps:
    * Add the following code in code modules in your report.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12844/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcyMDIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.tGBUnQZBToKkWX8iz_kt9ZvcAdZ7lmSQydHmzoUU4h4)

    ![image.png](https://support.boldreports.com/kb/attachment/article/12844/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcxOTgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.SdNOUfxqAQdSAUL2ICeTFYtJCop6S3Y3Frrfp4crB_4)
    ```
    Function ConvertToUtc(dateTime As DateTime) As DateTime
        Return TimeZoneInfo.ConvertTimeBySystemTimeZoneId(dateTime, "India Standard Time", "UTC")
    End Function
    ```
    * Drag and drop a text box and add the following expression. Click "**OK**," save, and preview the report. The current IST time will be converted to UTC time.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12844/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcxOTkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.2LPByrJ82N1EHy7m2awMDQoSUZHyO3vBQgSR4XfT71U)
    ```
    =Code.ConvertToUtc(Now())
    ```
    ![image.png](https://support.boldreports.com/kb/attachment/article/12844/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcyMDAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.9dm36FD9vBASVLR3w_it3wtO3S4vPGbelJPWtHNqBKA)

By incorporating these expressions into your report, you will be able to include the UTC timestamp as per your requirements.

 
 @(Embed){UTCConversion.rdl}(https://support.boldreports.com/kb/attachment/article/12844/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcyMDEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.0cebadIUsTL4gbIVzMityeKtkuQeUjAc36K0WYCmjac)

# How to Configure the Nonce Attribute for Bold-script-manager in Bold Reports

The **Nonce** attribute is typically used with the `<script>` tag in HTML to enforce a Content Security Policy (CSP) on inline scripts. It is not a general attribute that can be used with any HTML element. The purpose of the `nonce` attribute is to specify a cryptographic nonce (a number used once) that is included in the script element's `nonce` attribute and also in the CSP header of the server response. This allows the browser to validate that the script being executed matches the expected nonce value, helping to mitigate cross-site scripting (XSS) attacks. Here are the steps to configure the "nonce" attribute:

1. In the **Layout.cshtml** file, add the add-nonce attribute to the bold-script-manager element as follows.
```html
  <bold-script-manager add-nonce="@Context.Items["ScriptNonce"]"></bold-script-manager>
```

   This attribute will dynamically set the nonce value for the bold-script-manager element.

2. In the **Startup.cs** file, import the `System.Security.Cryptography` namespace, and inside the **Configure** method, add the following code sample.

```csharp
using System.Security.Cryptography;

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.Use(async (context, next) =>
    {
        RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
        byte[] nonceBytes = new byte[32];
        rng.GetBytes(nonceBytes);
        string nonceValue = Convert.ToBase64String(nonceBytes);
        context.Items.Add("ScriptNonce", nonceValue);
        await next();
    });

}
```

This code sets up middleware that generates a random nonce value for each incoming request and adds it to the `Context.Items` collection with the key `ScriptNonce.` The **RNGCryptoServiceProvider** class generates a cryptographically secure random value.

By following these steps, the `bold-script-manager` element in your application will dynamically have the `nonce` attribute set, ensuring compliance with Content Security Policy (CSP).

# How to Align Text Justify in a Textbox in Bold Reports

Bold Reports offers a custom attribute to align text justification in a textbox. With Bold Reports, you can justify your text effortlessly, ensuring balanced spacing and a professional appearance. Create clean and polished reports with aligned text using our intuitive design tools. Take your reporting to the next level with precise justification in Bold Report Designer.

The **TextAlign** custom property is used to align Text Justify in a Textbox. You can set the **justify** property value, as shown below.

 ![Justify.png](https://support.boldreports.com/kb/attachment/article/12847/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcwMjUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.nV4V4tB51TwcTZ6piGmiaf3e9rPPwqo6_TVvx_4gyKA)

Please find the Output snapshot below:

 ![Justify1.png](https://support.boldreports.com/kb/attachment/article/12847/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcwMjYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.WPLefQb7uBfCJI2kosckGzdlAbHJb6nYAMqHnOANYHs)

Please find the sample report below:

 @(Embed){Justify.rdl}(https://support.boldreports.com/kb/attachment/article/12847/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcwMjciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.re0FP5qvp3XzJnLfvcX1yLijBsOOpI95v8R8900Q_b8)

# How to Create a Inline JSON Data Source and Dataset in Bold Reports Designer

You can add data for reports in the Bold Report Designer from the application level by initializing the Bold Report Designer. This can be achieved using the **addDataSource** and **addDataSet** API methods. With these methods, you can create the data source and dataset for the reports during the initialization of the Bold Report Designer. This is especially useful for non-technical individuals who are unfamiliar with how to connect a database to a report.

Find the following steps to add the Inline JSON data source and dataset for Bold Report Designer from the application.

* Create a function and bind it with the **create** API Event in the **Index.html** file, as shown in the following code sample.

 ```html
<bold-report-designer id="designer" create="controlInitialized"></bold-report-designer>

<script type="text/javascript">
function controlInitialized(args) {
         ...
        }
</script>
 ```

* Create the **datasource** object, as shown in the following code sample.

 
 ```js
var datasource = {
    __type: 'BoldReports.RDL.DOM.DataSource',
    Name: 'DataSource1',
    Transaction: false,
    DataSourceReference: null,
    SecurityType: 'None',
    ImpersonateUser: false,
    ConnectionProperties: {
      __type: 'BoldReports.RDL.DOM.ConnectionProperties',
      ConnectString: '{\"Data\":\"[\\n  {\\n    \\\"field1\\\": \\\"value1\\\",\\n    \\\"field2\\\": \\\"value2\\\",\\n    \\\"field3\\\": \\\"value3\\\"\\n  },\\n  {\\n    \\\"field1\\\": \\\"value4\\\",\\n    \\\"field2\\\": \\\"value5\\\",\\n    \\\"field3\\\": \\\"value6\\\"\\n  },\\n  {\\n    \\\"field1\\\": \\\"value7\\\",\\n    \\\"field2\\\": \\\"value8\\\",\\n    \\\"field3\\\": \\\"value9\\\"\\n  }\\n]\",\"DataMode\":\"inline\",\"URL\":\"\"}',
      EmbedCredentials: false,
      DataProvider: 'JSON',
      IntegratedSecurity: false,
      UserName: '',
      PassWord: '',
      Prompt: '',
      EmbeddedData: null
    }
  };
 ```


* Create the **dataset** object, as shown in the following code sample.

 
 ```js
var dataset =
  {
    __type: 'BoldReports.RDL.DOM.DataSet',
    Name: 'DataSet1',
    Fields: [
      { __type: "BoldReports.RDL.DOM.Field", Name: "field1", DataField: "field1", Value: null, TypeName: "System.String", UserDefined: false },
      { __type: "BoldReports.RDL.DOM.Field", Name: "field2", DataField: "field2", Value: null, TypeName: "System.String", UserDefined: false },
      { __type: "BoldReports.RDL.DOM.Field", Name: "field3", DataField: "field3", Value: null, TypeName: "System.String", UserDefined: false }
    ],
    Query: {
      __type: "BoldReports.RDL.DOM.Query",
      DataSourceName: "DataSource1",
      CommandType: 0,
      CommandText: "{\"Name\":\"Result\",\"Columns\":[]}",
      QueryParameters: [],
      Timeout: 0,
      QueryDesignerState: null,
    },
    CaseSensitivity: 0,
    Collation: null,
    AccentSensitivity: 0,
    KanatypeSensitivity: 0,
    WidthSensitvity: 0,
    Filters: [],
    SharedDataSet: null,
    InterpretSubtotalsAsDetails: 0,
    DataSetInfo: null,
    DataSetObject: null
  };
 ``` 

* In the **controlInitialized** function of the Bold Reports Designer, you can call the **addDataSource** and **addDataSet** API methods to create a data source and dataset.
 ```js
function controlInitialized(args) {
 var designerObj = $('#designer').data('boldReportDesigner');
 designerObj.addDataSource(datasource);
 designerObj.addDataSet(dataset);
}
 ```

**Reference:** 
* [addDataSource](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-designer/api-reference/methods/#adddatasource)
* [addDataSet](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-designer/api-reference/methods/#adddataset)
* [create](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-designer/api-reference/events/#create)

# How to Change the JSON Data at Runtime in Bold Reports

Bold Reports is a powerful reporting tool that allows you to create and render reports from a variety of data sources. In addition to traditional data sources, Bold Reports also supports JSON data. In Bold Reports, we can change the JSON data through an API dynamically at runtime and render the reports. We can achieve this requirement by deserializing the JSON data (read as a text file) and loading it into the report at runtime in the OnReportLoaded API.

To pass JSON data for a report in Bold Reports through an API at runtime, you can follow the steps outlined below:

1. The data source information is stored in JSONResult, and you can store it in the local property.
    ```
    private Dictionary<string, object> _jsonResult;
        public object PostReportAction([FromBody] Dictionary<string, object> jsonArray)
        {
            _jsonResult = jsonArray;
            return ReportHelper.ProcessReport(jsonArray, this, this._cache);
        }
    ```
2. Utilize the jsonResult information with the ReportHelper.GetDatasource API to retrieve the data source details of the reports. Then need to change the connection string of the data source by using the DataSourceCredentials object.
**ReportViewerController.cs**
    ```
    public void OnReportLoaded(ReportViewerOptions reportOption)
    {
    	string basePath = _hostingEnvironment.WebRootPath;
    	List<DataSourceInfo> datasources = ReportHelper.GetDataSources(_jsonResult, this, _cache);
    	string jsonValue = System.IO.File.ReadAllText(basePath + @"\Resources\New_text.json");
    	foreach (DataSourceInfo item in datasources)
    	{
    	  FileDataModel model = new FileDataModel();
    	  model.DataMode = "inline";
    	  model.Data = jsonValue;
    	  item.DataProvider = "JSON";
    	  DataSourceCredentials DataSourceCredentials = new DataSourceCredentials();
    	  DataSourceCredentials.Name = item.DataSourceName;
    	  DataSourceCredentials.UserId = null;
    	  DataSourceCredentials.Password = null;
    	  DataSourceCredentials.ConnectionString = JsonConvert.SerializeObject(model);
    	  DataSourceCredentials.IntegratedSecurity = false;
    	  reportOption.ReportModel.DataSourceCredentials = new List<DataSourceCredentials>
    	  {
    	    DataSourceCredentials
    	  };
    	}
    }
    ```
    
3. Build and run your application. The report will now render with the JSON data attached, which was loaded from the "**New_text.json**" file.

    **Designer Preview SNAP:**
    ![image.png](https://support.boldreports.com/kb/attachment/article/12851/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcwNjIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.S7jMhLsq0pASsFijrcytchlvuxl2U2Phpao0t3K2FJk)
    
    **JSON Data modified at runtime SNAP:**
    ![image.png](https://support.boldreports.com/kb/attachment/article/12851/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcwNjMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Fjt0ljD8dgLFivRw95DSHBNO7nWHHNPv-7DCe6VCYWU)
    
 By following these steps, you can pass JSON data for a report in Bold Reports via an API at runtime, dynamically loading the data into the report for rendering.

  
 @(Embed){SampleASP.NetCoreMVCReportViewer.zip}(https://support.boldreports.com/kb/attachment/article/12851/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcyNzIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.AX6GcKf13f_pAiDk55BhC41090uqkAsInz7vWYDate8)

# How to Format a Number in Bold Reports

In Bold Reports, you have the ability to format numbers in your reports using the format dialog. This feature allows you to customize the appearance of numbers according to your specific requirements. Here's a breakdown of the formatting options available and how you can utilize them:

![image.png](https://support.boldreports.com/kb/attachment/article/12852/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc1NzQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.FLy8ixZbHAO43mof2bFRYpLS4rVcLKQqwJ8S1HGVgxM)

1. **Type:** When formatting numbers, you can select the "**Number**" type, which is specifically designed for numerical values. This ensures that only numbers are displayed, and any non-numeric characters are excluded.
2. **Decimal Places:** The "Decimal Places" option allows you to set the limit for the number of decimal places displayed. For example, if you select 2 decimal places and your number is 12345, it will be formatted as 12345.00, with two decimal places added.
   ![image.png](https://support.boldreports.com/kb/attachment/article/12852/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc1NzkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.VZRFBWy6IPzGv3dYkvWnmqQPUb7PBD9ibsnPi9P4OMk)
4. **Negative Values:** This option determines how negative numbers should be represented in the report. You can specify the format for negative numbers, such as enclosing them in parentheses like (123), displaying a negative sign before the number like -123, or placing the negative sign after the number like 123-.
   ![image.png](https://support.boldreports.com/kb/attachment/article/12852/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcyMTMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.QLGTlQriNsIQbA0wFJdfn-Uv_ii48IUxZRb1rIhnI2w)
6. **Show Zero:** In addition, you can choose whether to display zero values in your report. This option can be helpful when you want to explicitly show that a value is zero, even if it may seem redundant in some cases.
7. **Representation:** The "Representation" option provides control over how numbers are represented in the report. For instance, if you have a number like 19001, select the "Thousand" representation and it will be displayed as 19, indicating that it represents 19 thousand.
   ![image.png](https://support.boldreports.com/kb/attachment/article/12852/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcyMTQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.-wVZFcUNcpOlsFprvsUxkihs_rEdxNtVxLwo37iBmkk)
9. **Regional Formatting:** Bold Reports also offers regional formatting options, allowing you to customize number formats based on specific regional conventions. This is especially useful when working with international reports or different regional number formatting standards.
10. **Thousand Separator:** The "Thousand Separator" option enables the use of a separator character, typically a comma (,), to improve readability for large numbers. For example, if you have a number like 12345678, it will be formatted as 12,345,678, making it easier to read and understand.
   ![image.png](https://support.boldreports.com/kb/attachment/article/12852/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcyMTUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.DF2TM7_ZR4wlnOMfblc3Ep0wyfASamWRr_4kR-72jMg)

By utilizing these formatting options in Bold Reports, you can effectively present numbers in a way that best suits your reporting needs. The flexibility provided by the format dialog ensures that you can create clear and visually appealing reports with properly formatted numbers.

**Customize the number format in pattern (XXX,XXX,XXX.X) :**

In Bold Reports, we can also able to customize the number formatting for specific report item. For example, to customize the number format in the following pattern (XXX,XXX,XXX.X) you have to set the below format for that particular report item. 


1. Drag and drop a text box onto your report and set the value to the desired number. For example, let's use the value 123456789.
![image.png](https://support.boldreports.com/kb/attachment/article/12852/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcwNjciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.aVNN1gc25O1lJ7Y1ZiSmeJM3O-bsjWx_66Xe7rKOZZ0)


2. Select the text box you added in the previous step. In the properties pane, locate the number format settings. Set the format to "**000,000,000.0;(000,000,000.0)**".
![image.png](https://support.boldreports.com/kb/attachment/article/12852/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcwNjgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.mj-X4_tCx1OMNVyKBxNfeOXuIZSN8nqLIYRxu-Z8txc)

3. Save your changes and preview the report. The report will now render with the customized number format pattern XXX,XXX,XXX.X, applied to the specific report item.
![image.png](https://support.boldreports.com/kb/attachment/article/12852/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcwNjkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.eILG6bDZx-n4M2BVgg6DziTB-NHSBG9bW4Zzw-mVExs)

By following these steps, you can easily customize the number format in Bold Reports to display numbers in the pattern XXX,XXX,XXX.X for the desired report item.
 
 @(Embed){Format.rdl}(https://support.boldreports.com/kb/attachment/article/12852/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcwNzAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.EZnoAkvU2LUCF4c8fXerhxfQ1v48k77HA40TMnabovA)

# How to Connect to a GraphQL Data Source in Bold Reports

GraphQL is an open-source query language that enables clients to request specific data from an API. GraphQL provides a clear and comprehensive description of the data in an API, allowing clients to request exactly what they need and nothing more. It also makes it easier to evolve APIs over time and enables powerful developer tools. GraphQL is often used as an alternative to REST APIs for fetching and manipulating data.

Currently, we don’t have direct support for GraphQL, but we can connect to it through the Web API data connector. To connect to a GraphQL API using Bold Reports through the Web API data connector, follow these steps:

1. Click on the `Data` icon in the configuration panel of Bold Reports.

2. In the `DATA` configuration panel, click on the `NEW DATA` button.

3. In the connection type panel, choose `Web API` in the DATA SOURCES pane as shown in the following snap.
![Datasource.png](https://support.boldreports.com/kb/attachment/article/12877/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcyMDciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.MsPSzG7ITXnAostvVisYMriK1W-_PasYPdH1SG-DpgY)

4. Enter a valid GraphQL root URL in the URL text box. This is the endpoint URL of your GraphQL API.

5. Choose the POST Method Type from the combo box for the provided REST API. This indicates that you will be making a POST request to the GraphQL API.

6. Select the "Raw" option for the POST request. This allows you to enter the GraphQL query directly.

7. Enter your GraphQL query in the input text box below the Raw option. This is where you define the specific data you want to retrieve from the GraphQL API. You can refer to the following image.
![RestAPI.png](https://support.boldreports.com/kb/attachment/article/12877/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcyMDUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.hxYHU-SQ62CFBiK1l0nVXYINTKXfgKOIxGW-mv6OZNw)

8.  Enter the remaining options, such as headers and authentication type, if required.

9. Choose a JSON data format from the combo box based on the expected response format of your GraphQL API.

10. Click on the "Connect" button to establish the connection between Bold Reports and your GraphQL API.

11. Once connected, you can drag and drop the table from the table schema onto the query design view page. 

12. Preview the data in the query designer page to see the results of your GraphQL query.
![querydesigner.png](https://support.boldreports.com/kb/attachment/article/12877/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcyMTIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.-pOQs95XXASTq4rjemoBtwAjlFeSO30aawcrfx1otyE)

# How to Apply Alternating Row Colors in a Tablix

Applying alternating row colors in a tablix is a technique used to enhance the readability and visual appeal of a report. By assigning different background colors to consecutive rows, you can create a visual pattern that helps users distinguish between rows more easily. Here's how to apply alternating row colors in a tablix:

1. Create a report with a tablix and configure the Tablix control by defining the dataset and adding the necessary columns and rows. You can bind the Tablix to a data source by specifying the dataset name, table or view name, and any required parameters.
![Tablix.png](https://support.boldreports.com/kb/attachment/article/12878/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcyMjUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.jEwKb7BcY01UKWSPQdRF0cHtEGae-LEIQU8tBn6-iU8)

2. Select the tablix control to which you want to apply alternating row colors. Then, select the entire row group.
![RowGroup.png](https://support.boldreports.com/kb/attachment/article/12878/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcyMjYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.FBeJs5x6-Yh_Pu7NxIgYSz9NprpSiqU7sWjH0BQP82I)

3. In the properties window or pane, under the Appearance category, click on the square icon located at the right corner of the Background Color property. Then, click on the Expression menu to open the expression builder.
![Expression.png](https://support.boldreports.com/kb/attachment/article/12878/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcyMjgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.PBgZHWs0dQsz3BiqCfliBIRmwJam7g012S1DyKaNYrI)

4. In the expression editor, enter the following expression to define the alternating row colors:
    ```csharp
    =IIF(RowNumber(Nothing) MOD 2 = 1, "#F2F2F2", "#FFFFFF")
    ```

    ![BackgroundColor.png](https://support.boldreports.com/kb/attachment/article/12878/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcyMzAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.JvwXO7We-0XvtKYMi8rmLV9BDk7aPENDt2cd3fjM3nw)

:::Info
**Note:**  This expression uses the RowNumber function to get the current row number, and the Mod operator to determine if the row number is even or odd. If it's even (divisible by 2), the first color (#F2F2F2) is applied, and if it's odd, the second color (#FFFFFF) is applied.
 :::

5. Preview the report to see the alternating row colors in action. The rows should now have different background colors, alternating based on the expression and row number.
![Output.png](https://support.boldreports.com/kb/attachment/article/12878/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcyMzEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.HCmCyQyeFkRei1UxzlU4q8i0JeyfopWWPaaB1QlsRZk)


# How to Remove Unwanted Characters from a String in Bold Reports

BoldReports provides a convenient method to remove unwanted characters from a string using the **System.Text.RegularExpressions.Regex.Replace** function. This functionality allows you to customize the removal of specific characters based on your requirements.
Use the following Expression to remove the Unwanted characters.

**=System.Text.RegularExpressions.Regex.Replace(Fields!YourField.Value, "[desiredCharacters]", "")**

* **Fields!YourField.Value** is the expression for the field that contains the string.
* **[desiredCharacters]** is a regular expression that matches all characters that are not in the desired character string.
* **""** is the replacement string.

**Example:**
In the following example, remove all characters except numbers from the string.

| Expression| Output|
| ------ | ------ |
| =System.Text.RegularExpressions.Regex.Replace("A123456sdfghjxcv1b2-c?~~`!@#$     %^&*()_+{}[]3d4e5f6g", "[^0-9]", "")| 123456123456|

Find the following sample report. 
 @(Embed){Regex.rdl}(https://support.boldreports.com/kb/attachment/article/12881/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcyNzEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9._cOdvx4KnDtle-15ShwuL9AAydCJOUHAHw2Fel5Cxlk)





# How to Hide and Show the Columns of a Tablix Based on the Selected Parameter in Bold Reports

In Bold Reports, you can dynamically hide or show columns within a Tablix based on specific parameters. This functionality allows you to customize the display of data based on user selections or other conditions. It helps you to achieve this column visibility control in Bold Reports.

**Follow the steps below to control the visibility of a column in Bold Reports using a multi-value parameter:**

1. Create a report with a Tablix and a multi-value parameter. Assign specific available values as columns to the parameter.
     
      ![Pic1.png](https://support.boldreports.com/kb/attachment/article/12882/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjczNDYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.guwJlhVFgczu-koqpKy8Uh0zTYRFlrt1_Tex-o1UDe4)

2. Select the Tablix, then switch the Grouping panel to Advanced mode.
     
     ![Pic2.png](https://support.boldreports.com/kb/attachment/article/12882/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjczNDciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.JDm1GKD2z8rWnhd6kNLUtkz4bMnj78SQhtiCmqEGAhQ)

3. Select the column of the Tablix by clicking on the static column in the Column Grouping panel, then click on the Visible properties expression panel.
     
      ![Pic3.png](https://support.boldreports.com/kb/attachment/article/12882/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjczNDgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.j7HjiY9hE9yVpqFpMPPPwtOjHwYq7IObegns0MtLmXc)

4. In the Visible properties expression panel, Enter this expression **=IIf(InStr(Join(Parameters!Parameter.Value, ","), "Column") > 0, False, True)**
      * **Parameters!Parameter.Value** - Is your Multiple value parameter value.
      * **Column** - Is the column value that you previously set in the Parameter available value.

     
      ![Pic4.png](https://support.boldreports.com/kb/attachment/article/12882/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjczNDkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.WgvQ-a8Xz_ORVhKlQC7QHuDofrLBF3tPs260gTaHVjA)

5. Repeat the Step 3 and 4 for all columns in Tablix.
6. Run the report and select the parameter to show, or unselect the parameter to hide it.
     
      ![Pic5.png](https://support.boldreports.com/kb/attachment/article/12882/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjczNTAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.r0nL8D3uhgMN-nMW3zfXJXrWiEApRYlp_XvBq_dpg_w)

7. Find the sample report below.
     
      @(Embed){Column-By-MultivalueParameter.rdl}(https://support.boldreports.com/kb/attachment/article/12882/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjczNTEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.zVow2GFvViwttklRJwthSWHe_L66e9dcrMa6biq1Iqk)

# How to Prevent Total Row Column in CSV Export in Bold Reports

As per the RDL standard, when exporting a report to CSV format in Bold Reports, if the tablix has a total row, the total row data will be displayed in a new column towards the right side of the CSV file. This can be prevented by setting the output value of the total row column cell to "**No Output**" in the [Data Element](https://help.boldreports.com/embedded-reporting/aspnet-core-reporting/report-designer/designer-guide/report-items/tablix/member-properties/#data-element) properties. You can use this to disappear the totals in the CSV export.
To achieve this follow the below steps:

1. Select a tablix that contains the total row in it. Then select the total column cell and navigate to the Data element in the properties pane.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12886/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjczNDEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.GggxogNl2o5R5O5awZjq1_8TJRMd2bebxd2rTQTVDOQ)
2. Set the output as "**No Output**". Save the report and then preview and export the report to CSV format, the total will not come in a new column, it will be disappeared. But, before applying this Data Element property the total will be displayed in a new column as shown in the following snap.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12886/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjczNDIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.sOuakmhqduduX1W7Y_neZz18AiJ2sC6UVCvhYXxEiY4)

    **Before Exported SNAP:**
    ![image.png](https://support.boldreports.com/kb/attachment/article/12886/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjczNDQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.2_7RYJtg5FCTkbV4_abe-5ZEGyCBdOJfVuWknfN09t4)
    **After Exported SNAP:**
    ![image.png](https://support.boldreports.com/kb/attachment/article/12886/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjczNDMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.uChOUPTc0gPr0j0zsF3AKEiP3fPDDz-rY_Y-BcgTs0s)

 
 :::Info
**Note:** The "**No Output**" output value can be used to prevent any data from being exported from a data element. This can be useful for hiding sensitive data or for reducing the size of the exported file.
 :::

  @(Embed){TotalRowCSV.rdl}(https://support.boldreports.com/kb/attachment/article/12886/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjczNDUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.jn2DtxNLDradGpLW6rJhAsZvohhADwHxkc48fblZSy8)

# How to Prevent Methods from Being Called Twice in React

When working on a React application, you may encounter a common issue where a method is triggered twice unexpectedly. This can be caused by a number of factors, but one common cause is the use of the `StrictMode`.
`StrictMode` is a React feature that helps to catch potential errors in your code. However, it can also cause some methods to be called twice. This is because the `StrictMode` forces React to re-render components even when their state or props have not changed.

To fix this issue, you can disable the `StrictMode` by removing the **</React.StrictMode>** closing tag from your **index.js** file. This will prevent React from re-rendering components unnecessarily and will stop methods from being called twice.

Here are the steps on how to disable the `StrictMode` and fix a method being called twice in React:

1. Open the `index.js` file in your React application.
2. Locate the line that contains the **</React.StrictMode>**.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12888/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjczNjAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.QMy21OHZ55v6SDTzSWfdkXHPXR5uziGrnov63_RR3_Y)

3. Remove the **</React.StrictMode>** closing tag from the line.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12888/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjczNjEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.rugyH_g7DFkyVgf9UK4Cche_dFXmzQPmjxRoPP5jHMg)
4. Save the file and see the changes.

Before removing the **Strict Mode**:
![image.png](https://support.boldreports.com/kb/attachment/article/12888/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjczNjQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.62pAgmLGIIkXQVOg90Jje9z-k72TnNI_4bTAuXS_T3U)

After removing the **Strict Mode**:
![image.png](https://support.boldreports.com/kb/attachment/article/12888/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjczNjMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.E_RPVvOJWr1-Tk1jB9KAWcBoI40tno28X8g3KZnr-eo)

After following these steps, the method triggering issue should be resolved, and your method will be called only once as expected.

 
 :::Info
It is important to note that the issue of methods being triggered twice due to the **StrictMode** occurs only in the **development** mode. When you build and deploy your React application for production, the **StrictMode** is automatically disabled, ensuring that the problem will not affect your application.
 :::

# How to Grant Access to Bold Reports License for Others in the Company

Welcome to the knowledge base article on managing Bold Reports licenses. As a user of Bold Reports, you may be aware that currently, there is no dedicated license management portal within the Bold Reports website. However, Syncfusion, the parent company of Bold Reports, offers a comprehensive portal that allows you to conveniently manage your licenses for all Syncfusion products, including Bold Reports. In this article, we are offering Enterprise portal system where you can add or remove your developer from your company. So, the users who exist inside the portal including the admin, can access the company purchased license.

**Step 1: Requesting Enterprise Portal Setup**

If you have the active subscriptions with Bold Reports, you can request our sales team via email sales@syncfusion.com for setting up the enterprise portal for your company. So that you can share your subscription to your colleagues by adding them as a user in the portal.

**Step 2: Adding Users to the Portal**

Once the portal is set up, you will receive a notification from our sales team. Follow these steps to add users:

* [Login with Syncfusion](https://www.syncfusion.com/account/login) enterprise [Portal](https://www.syncfusion.com/account/portal) using your admin credentials.
  ![image.png](https://support.boldreports.com/kb/attachment/article/12896/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjExMjYyIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.WuIM0eHx8o3p8_Xso7HyRXJ6bg3BRL2GVEXZbsyRLbM)
* Within the portal, you can add any number of users according to your requirements. Refer to this [KB](https://support.boldreports.com/kb/article/12905/managing-bold-reports-licenses-utilizing-the-syncfusion-portal-for-license-management) article for detailed instructions on adding users.

**Step 3: Accessing the Subscription**

All users within the enterprise portal can access the active subscription. However, it is essential that at least one portal user has an active subscription for the purchased product. If none of the portal users have an active subscription, access to the subscription will not be available to any portal users except the person who made the purchase.

To resolve this situation, contact sales@syncfusion.com to transfer the subscription to another user within the portal, or add the user who purchased the subscription to the portal.

::: Info  
Make sure to add the exact number of users to the portal based on your purchased subscription count. For example, if you have purchased five Bold Reports Viewer SDK licenses, add only five members to your portal. If you need to add more users, please contact our sales team at sales@syncfusion.com. It's important to note that the admin or the user who purchased the subscription but is not a developer will also count as a portal user.
:::

**Step 4: Accessing Product Downloads**

All users in the portal can access the download page for their respective products. Follow these steps to find the downloads:

* Sign in to the enterprise portal using your credentials.
* Locate the download page within the portal.
* From the download page, you can access and download the Bold Reports products associated with your subscription.
* If you encounter any issues or need further assistance, please reach out to our [support team](https://support.boldreports.com/) for prompt help.

#### Bold Reports Embedded Download
If you or anyone in your portal have active Bold Reports Embedded subscription, follow the below steps to download the setup.

1. Go to this download Link and it will be redirected to the login page, follow the login process as explained for the Bold Embedded product above.

2. After successful login, you will be taken to the below Bold Reports Embedded download page from where you can download the setup.

![image.png](https://support.boldreports.com/kb/attachment/article/12896/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc0MTkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.DkyxdV0vU0MVk7rvoN65wtFKZimxTdkRL-zK9hnEfHM)

# Managing Bold Reports Licenses: Utilizing the Syncfusion Portal for License Management

Welcome to the knowledge base article on managing Bold Reports licenses. As a user of Bold Reports, you may be aware that currently, there is no dedicated license management portal within the Bold Reports website. However, Syncfusion, the parent company of Bold Reports, offers a comprehensive portal that allows you to conveniently manage your licenses for all Syncfusion products, including Bold Reports. In this article, we will guide you through the process of utilizing the Syncfusion portal to handle your Bold Reports licenses effectively.

#### You can add users in portal using following steps:
This option available for Portal (Admin, Power User, Technical Admin).

1. [Login with Syncfusion](https://www.syncfusion.com/account/login) and go to [Portal](https://www.syncfusion.com/account/portal)  page. This option available in “My Dashboard” page under “Enterprise Portal” section and click “Manage License”, please find the below screenshot.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12905/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc0NzciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Dq4VpVYLzrk50PRBk8MpWTPxs49HFq_PX24kTe_UN3k)
2. If you have multiple portals, please select the portal to add users.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12905/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc0NzgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.95x4gBqXKFfPMyRfUOjvuC9WFjGapRO9vIuIX6JhHoY)

3. Please click the “View”, please find the below screenshot.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12905/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc0NzkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.-BRBjeclQZKz35iLW4NPqaYHi1tFHCkrM4Mch0rOwPQ)
4. You can add Single user or Multiple users, please find below screenshot.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12905/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc0ODAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.yeX_4F5emhO3aRnpB3H8gBpYCQjX2BW52UvCP8Fgh70)
 
 :::Info
  A user can be added to different portals, but not to the same portal again.
 :::

###### Add Single user:
1. Then click “Add Single user”, the popup window will open, please file the details then click “Add User” button.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12905/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc0ODEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.XdwO5jgthWsgiNT85cYkHavzJzGWG0z9hJnJAzJBwig)

2. You can create the new project while adding user in portal.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12905/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc0ODIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.jJ2iCzisJADmMs4DB6UyWatk9-Euo7mWCmHoVoQEmhk)

3. After, this user added successfully.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12905/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc0ODMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.m3Aq77HfGTQcV0kKWqyZqTGBw77hgSHoYu78f4BY_0c)

##### Add Multiple users:
 

1. Select “Add Multiple users” option, the popup window will open, please download our sample Excel Template. Then add the user in excel and upload that file using our file upload option. Please click (dot) icon. Please find the below screenshot.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12905/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc0ODQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.ce22gGXBKhTasLJGhpQQtJ_LCCy9vs343t6qQV31_nI)

2. Then click “Upload” button. The user will be added successfully.

##### You can Remove the users from portal using following steps:
 
1. Please select the user in portal detail page and click the action icon and then click “Delete” option. Please find below screenshot.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12905/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc0ODUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.yrqTCOThckRD9G-p7_-1OIbXzeqx5Ya2kpZ7G2EDE_I)

2. Then the popup confirmation window will open and click “YES” button. The user will be removed from portal.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12905/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc0ODYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.J3Dm7rAanqhZSQPSBu_YfQosxU66tQ0Zx_IuMtMpMgc)

 :::Info 
End users can use assigned license only. They can’t access portal page.
 :::

# How to Change SQL DataSource Credentials Dynamically in Bold Reports Report Writer.

BoldReports allows you to change the datasource credentials dynamically at runtime for the [Report Writer](https://help.boldreports.com/embedded-reporting/aspnet-core-reporting/report-writer/export-ssrs-rdl-report/) control. This can be useful in cases where you need to change the connection string at runtime or render the report with different datasource credentials. For example, you can use this feature to share a report with different users who have different datasource credentials. This can also be useful in cases where the connection string changes frequently.

To change the datasource credentials dynamically, you can use the following steps:

1. Get the datasource available in the report using the writer.GetDataSource() method.
2. Change the datasource credentials dynamically.
3. Use the modified datasource credentials to render the report and export.
The following code sample shows how to change the connection string of the AdventureWorks data source in the report:
```
public IActionResult Export(string writerFormat)
        {
            FileStream reportStream = new FileStream(_hostingEnvironment.WebRootPath + @"\Resources\sales-order-detail.rdl", FileMode.Open, FileAccess.Read);
            
            BoldReports.Writer.ReportWriter writer = new BoldReports.Writer.ReportWriter(reportStream);
            List<ReportDataSourceInfo> datasources = writer.GetDataSources();

            string connectionString = "Data Source =dataplatformdemodata.syncfusion.com; Initial Catalog = AdventureWorks; User ID = 'test'; Password = 'test@123'";
            DataSourceCredentials DataSourceCredentials = new DataSourceCredentials();
            DataSourceCredentials.Name = datasources[0].Name;
            DataSourceCredentials.ConnectionString = connectionString;
            writer.SetDataSourceCredentials(new List<DataSourceCredentials> () { DataSourceCredentials });

            ...
            ...
            ...
        }
```
 
 @(Embed){ReportWriterNet6.zip}(https://support.boldreports.com/kb/attachment/article/12920/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjM2OTE3Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.dMJDTNETi1Wqrfi8fS94ghmbQrM1ZwemDhpfHimhnl8)

# Customizing Category Axis Value in Bold Reports

In Bold Reports, you can customize the category axis value for the chart report item. Customizing the category axis value in Bold Reports provides the ability to personalize the representation of data values in charts, resulting in more insightful and comprehensible reports. This feature empowers users to present data in a manner that best conveys the intended message, emphasizing particular data trends or patterns. By modifying the category axis values, users can effectively showcase the progression of projects over time, delineate the stages of manufacturing processes, or highlight various levels of customer satisfaction. For instance, users may choose to label the category axis values as "level 1", "level 2", "level 3", and so on, to better illustrate the hierarchy or progression within the data. With this level of customization, Bold Reports enables users to create highly informative reports that facilitate better understanding and interpretation of data.

To customize the category axis value, follow these steps:

1. Drag and drop a column chart report item in the designer area.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12923/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc2MDYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.euBU2Am2VrnJ4bdK9uWJEdeaAxm4Lfo0kcnrH4rggLE)
2. In the data section, add the values for the **Yvalues**and **Column** as per your needs. Here, we are passing the values as (**Name** field for **Yvalues** and **DepartmentID** for **Column**).
    ![image.png](https://support.boldreports.com/kb/attachment/article/12923/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc2MDciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.x9d1ZTaeicLW5rDeFUsIScb1-4pLDB6iYDOYiXp0QC0)
3. In column, click the **settings** icon and then select "**Groups**".
    ![image.png](https://support.boldreports.com/kb/attachment/article/12923/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc2MDgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.jGRPACQfmBUICEjK5pDfszKztQldy7OOg9vwEMgeDOg)
4. In the Grouping dialog, go to the label section and set the [expression](https://help.boldreports.com/standalone-report-designer/designer-guide/compose-report/expressions/) as shown below:
    ![image.png](https://support.boldreports.com/kb/attachment/article/12923/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc2MTIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.KLhBExkvOPL73lpN3M8pQkn8_wd6KEffYOU4HT4UtCE)
    ![image.png](https://support.boldreports.com/kb/attachment/article/12923/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc2MTEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.BKSRMznfFHviQ36KzeKNL5c4LWnq8E87U4QIZFkWQpE)
    ```
    ="level" + Fields!DepartmentID.Value
    ```
5. Save and preview the report. The expression above will result in the category axis label values being modified to "level1", "level2", "level3", and more. You can customize the expression to show any text you want.

    **Before customization output:**
    ![image.png](https://support.boldreports.com/kb/attachment/article/12923/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc2MTYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.IXYVDAYo-VbNSQyYwkbJRisIv1Hh9_pti7C8LkZgVuU)
    **After customization output:**
![image.png](https://support.boldreports.com/kb/attachment/article/12923/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc2MTAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.pkqiIrOklPsDuY1h3IyFPyGgSrxaApAYo3M0LFZMTrU)

 
 @(Embed){ChartReport.rdl}(https://support.boldreports.com/kb/attachment/article/12923/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc2MTUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.iDHnLDwgK-mFX6mxh3r1-k6bjQ19tJTG-KWSJ6l2FKw)

# Enabling Offline Validation for Bold Reports Community License

Bold Reports offers a Community License that grants eligible users access to a variety of reporting features. By default, the Community License requires online license validation. However, if you need to validate your license offline due to network restrictions or other reasons, you can request Bold Reports' sales or support team to enable offline license key support for your subscription.

#### Steps to Enable Offline Validation
To enable offline validation for your Bold Reports Community License, contact Bold Reports' sales (sales@syncfusion.com) or [support](https://support.boldreports.com/) team and request an offline license key. They will guide you through the process and provide the key once your profile and subscription are validated.


##### See Also

[How to generate and download Bold Reports offline license key](https://help.boldreports.com/embedded-reporting/licensing/offline-license-key/#embedded-reporting-tools-offline-licensing-overview)

# Adding Custom Fonts in the Bold Reports Enterprise server

The Bold Reports enterprise server is equipped with a comprehensive collection of default fonts to cater to various reporting needs. However, there may arise circumstances where you require the inclusion of specific fonts within the server. To address this, Bold Reports offers a straightforward process for adding custom fonts to enhance your reporting capabilities.

The following comprehensive instructions will guide you through the process of incorporating custom fonts into the Enterprise Server:

1. Download the custom fonts **.ttf** file and install that file for installation for all users, as shown in the following snap.
     ![image.png](https://support.boldreports.com/kb/attachment/article/12936/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc3MDciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.YwyVCMe7GgiTAD_3h1dh17Dlzm6F0Y7YXviAXpAJgrM)

2. Create a new folder named **custom-fonts** at the below-mentioned location.
     
   **{Installed Location}\BoldServices\app_data\reporting\configuration**
     
3. Place the custom font file in the newly created "custom-fonts" folder.

4. Locate the **config.xml** file within the following path.

     **{Installed Location}\BoldServices\app_data\reporting\configuration\config.xml**

6. Modify the **config.xml** file to include the custom font folder path, as shown in the following snap.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12936/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc3MDgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.IFLXWymkF81cxhzfG4VUNGpoc_R2B78-f7CaKoI83RY)

    In the key, use the file Title as shown in the following snap.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12936/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc3MDkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.64BRpKlRoSDW--N7u3b2zLr_sOTSCnn47o2iH4WSUSs)



7. Finally, run the server, and the custom font is included in the enterprise server.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12936/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc3MTAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.8Qgz8sTy3Yi5CMHCWq0rGRJuSMm8HGA7FiQbxk8AioU)




# Customizing Report Viewer Theme in a WPF Application

The WPF application includes a Report Viewer control that enables users to view and interact with reports. To achieve a customized appearance, you can modify various properties such as font styles, colors, and layout. By adjusting these properties, you can create a visually appealing report viewer that aligns with your application's specific needs.

The following are the instructions to customize the background color of the report viewer and toolbar:

##### Customizing the Background Color for Normal and Print Layout Mode

1. Add the `ExternalTemplate.xaml` file to your WPF application. You can download the file from [here](https://support.boldreports.com/kb/attachment/article/12943/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgxMTkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.bECVwpj16tzdejInf6q4ROk_IJFW9saYu5_houtxjPU).
    ![image.png](https://support.boldreports.com/kb/attachment/article/12943/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc3MTMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.xrLRSJP1rxgzNqG2wTUnbH_aP_Hgz_7PnX5wJu1s8K4)

2. Open the downloaded `ExternalTemplate.xaml` file and modify the necessary properties to customize the background color. You can change the background color for the print by locating the relevant section and modifying the background color property.
   ![image.png](https://support.boldreports.com/kb/attachment/article/12943/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgxMTYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.BafFALj6jjZBtIlBcT2wv1t6SXaiva8099pxO99b-qE)

3. Register the style in your `MainWindow.xaml` file. Refer to the following image for an example:
   ![image.png](https://support.boldreports.com/kb/attachment/article/12943/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgxMTUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.BMkALT7nNpGPflGXr4hgBAADiMOncjjJBTd01yKHtpA)

4. Save the changes and run the WPF application. You will now observe that the report viewer and toolbar possess the customized background color you specified. See the following image for an example:
    ![image.png](https://support.boldreports.com/kb/attachment/article/12943/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc3MTYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.umNm02y8lXmtDxNETNGbmK_DHJ6TOHktXHXYZjl4Z54)
![image.png](https://support.boldreports.com/kb/attachment/article/12943/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgxMjEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.WqcgvjSc5MrYADGPNTr57b16WIEM6_SNOOkX6aUweew)


##### Customizing the background color of the Toolbar.

1. Locate the toolbar item property in the **ExternalTemplate.xaml** and Customize toolbar properties according to your specific needs.
![image.png](https://support.boldreports.com/kb/attachment/article/12943/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc3MTkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.1dKwbAN8jiSu33MZn2YQ_CXKAnsm2WpU2IR8nfGMXn0)
![image.png](https://support.boldreports.com/kb/attachment/article/12943/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc3MjAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.MdGQdcqH3JLWLdcWUQYmbhA9d9yHwJIM6jEZDGHxEDw)

 :::Info
Please note that the steps above may require further customization based on your requirements. You can download the sample application from [here](https://support.boldreports.com/kb/attachment/article/12943/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgxMTgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.IeZsWkZTfPtpeygzTxMcYNr2XrRvY49_23j2-NI4roM).
 :::


# A Guide to Rendering Reports with Relative Layout

In report design, report items are rendered in a sequential manner from **left to right**. This ensures that the items placed on the left side of the report are rendered first, followed by those on the right side. This approach maintains a logical and consistent display of report content.

For instance, consider the following design: tablix1, tablix2, tablix3. When this report layout is rendered, tablix1 will be displayed first, followed by tablix2 and then tablix3. You can download the sample report from [here](https://support.boldreports.com/kb/attachment/article/12982/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgwNjciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.TswpTomPv9zh02Wb4KBpP1Y3GPHbG-DsDT3J_BacIzA).
    ![image.png](https://support.boldreports.com/kb/attachment/article/12982/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc3OTYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.GVsM2B6jyD2tqs25FMJZfAit3TueC6nIHwW82MBZx4Y)
**Rendering sequence:**
![image.png](https://support.boldreports.com/kb/attachment/article/12982/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc4MDEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.4vR54F6AuKg3RSofXkQMybazo8ALKxWU9p4WUohkST4)

However, if tablix1 contains a significant amount of data while tablix2 contains minimal data, tablix3 will be rendered only after tablix1, resulting in space. This can be problematic in terms of layout. 
    ![image.png](https://support.boldreports.com/kb/attachment/article/12982/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc3OTciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.L2ER3fSf-woZTM6QgcPre6Ur6N7RZiLuQCF-qW-7rpY)

To overcome this issue, follow the below steps:

1. Enclose tablix1 within a rectangle. This can be done by adding a rectangle item around tablix1. Here's an image illustrating this step:
    ![image.png](https://support.boldreports.com/kb/attachment/article/12982/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgwNjgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.zlQdaYUEjDEGcfhZa_lbTlER5Nc9KdxoUG0tATBNYCE)    
2. Adjust the size of the rectangle to match the combined size of both right tablixes. This way, the rendering order will be maintained correctly. By enclosing tablix1 within a rectangle, it ensures that tablix2 and tablix3 are rendered alongside tablix1, even if tablix1 contains a significant amount of data. You can refer to the following image for a visual representation:
![image.png](https://support.boldreports.com/kb/attachment/article/12982/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc3OTgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.hI_RW0wrcS4GehiP0TEaC21T1bCyeLeuSFduqFE7v0I)

3. By incorporating this approach and adjusting the report layout accordingly, you can ensure the report displays as intended. To observe the changes, run the report and observe the updated rendering. You can refer to the following image for a visual representation:
![image.png](https://support.boldreports.com/kb/attachment/article/12982/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc3OTkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.SR65pNS1l2xGKgqsDn7f7qfjU2foILHPB5dIY4fNLJE)

By following these recommendations, you can effectively address the layout issue and ensure that the report displays as intended, providing a seamless and visually pleasing experience for users.

# Mandatory Parameters in Bold Reports

Bold Reports allows you to set mandatory parameters for your reports. Mandatory parameters are parameters that must be passed for the report to render. If a mandatory parameter is not passed, the information will not render. The required parameters will be denoted by an **asterisk (*)** at the end. It can help reduce the number of errors that users make when running reports by ensuring they pass values for all mandatory parameters.

To set mandatory parameters in Bold Reports, you need to do the following:

1. Create a new report with the parameters you want to use.
2. Click on the grey area in your report and navigate to custom properties in the properties panel.
    ![image.png](https://support.boldreports.com/kb/attachment/article/12991/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc5OTQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.h_LLiXEPQ6RNClpHm5xq7nxj2PPakZ2sx-1d_MIWM88)
3. Add the following custom property:
   * **ShowRequiredFieldIndicator**: Set this property to **true** to enable the **mandatory parameter indicator(*)**.
     ![image.png](https://support.boldreports.com/kb/attachment/article/12991/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc4NTYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.KVY-gGsHv6iMdtHhXVGgXY53k9T1MN_t-c6DiReTvhM)
     ![image.png](https://support.boldreports.com/kb/attachment/article/12991/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc5OTUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.w_x6L4RKdMj2hHN8pRqEdlOfQGz0rCxeR18h2D7SKLw)
 :::Info
The user must pass values for all the Mandatory parameters to render the report. The ability to set the Mandatory Parameters feature was introduced in the BoldReports version 5.1.28. Ensure you have upgraded your Nuget packages and scripts to this version or later to access this feature.
 :::
  
 
 @(Embed){MandatoryParam.rdl}(https://support.boldreports.com/kb/attachment/article/12991/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc5OTYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.UViz39mnJUEfnn_i9WSbIHIH2Kdrt05TDKeaC-XQ8yU)

# Hide the Entire Tablix Widget in the Bold Report Viewer

In the Tablix widget of the Report Viewer, removing empty space refers to eliminating or reducing the blank areas within the Tablix that do not contain any data or information.

To hide the entire Tablix widget in the Bold Reports Report Viewer, set the visibility property of the Tablix to hidden. This will ensure that the Tablix is not displayed, and any empty space it occupies will be removed. Follow these steps:

1. Open the report Bold Reports Report Designer.
2. Select the Tablix widget that you want to hide. In the Properties pane, locate the `Hidden`  property which is in the `Visibility` property. Click checkbox.
![Hidden.png](https://support.boldreports.com/kb/attachment/article/13007/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg0NzIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.9BccDjnehm62EHdCoZS8ZrbQi6yUDnchHSJR7rQRdiQ)

3. Preview the report; the empty space will be available when the tablix widget is hidden as shown in the following snapshot.
![Emptyspace.png](https://support.boldreports.com/kb/attachment/article/13007/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg0NzQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.PTiag_Uwg9e7WPfrjRex61fFoR_LY7kKDQLlMsjVXv8)

### Remove Empty space in the Tablix widget Report Viewer
To remove the empty space in the tablix widget in the Bold Reports Report Viewer, follow these steps:

1. Select the Tablix widget that you want to hide. In the Properties pane, locate the `Hidden`  property, which is in the `Visibility` property.
2.  Click checkbox and select the expression as shown in the following image. 
![Visibility.png](https://support.boldreports.com/kb/attachment/article/13007/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc5MTAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.hGPOEjj7V-3ktNj_RxLBs7DNqLlmxh-jkGC4PQU-pH4)

3. In the Expression dialog box, enter the expression as **True** as shown in the following image. Click OK to close the Expression dialog box.
![Expression.png](https://support.boldreports.com/kb/attachment/article/13007/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc5MTEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.15zJI77fKb3CHPkAPbPPwsgVm_UIqnFR-l8US9IJ0gQ)

:::Info
**Note:** You have to use the expression to hide the table without a blank space. 
 :::

4. Now, preview the report. By setting the visibility of the Tablix widget to `Hide` and using the `True` expression as the Hidden Expression, the widget will be hidden when viewed in the Bold Reports Report Viewer. This ensures that there is no empty space left behind where the Tablix widget used to be.

    **Before changed Output preview:**
    ![Beforepreview.png](https://support.boldreports.com/kb/attachment/article/13007/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc5MTIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.zPepyf35rp4uyj2BfDOfqpYwzLpoGniPK6b9V8x6IJQ)

    **After changed Output preview:**
  ![Afterpreview.png](https://support.boldreports.com/kb/attachment/article/13007/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg0NzUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.LVqoa8W81h5VVZ3bk5zYwYiJOGbKJS5ISsRH6qcIRZQ)


# How to create Optional Parameters in Bold Reports

Bold Reports allows you to set optional parameters for your reports. This can be useful if you have a report with many parameters and only need to pass values for a few of them. For example, in your report, it has four parameters, and you have to pass values for only two parameters means, you can set the other three parameters as optional parameters and pass values for anyone among the three optional parameters. It can help to reduce the number of errors that users make when running reports, by ensuring that they pass values for all mandatory parameters.

To set optional parameters in Bold Reports, you need to do the following:

1. Create a new report with the parameters you want to use. Then edit all the parameters (you need to set them as optional parameters only) and enable the **Allow blank value ("")** checkbox, and save those parameters.
    ![image.png](https://support.boldreports.com/kb/attachment/article/13022/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgwMTUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.1SyHFTABIDIKFEOzxMniI7wlrFLwIX3FBIeiawfRDyM)
2. Click on the grey area in your report and navigate to custom properties in the properties panel.
    ![image.png](https://support.boldreports.com/kb/attachment/article/13022/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgwMTQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Pulnx1cpnN0RyXXdgARWEsWNfXXdq1Yi0scPaYmX60k)
3. Add the following custom property:
   * **OptionalGroupParameters**: Set this property in the following format to use the optional parameter custom property. This property specifies the names of the **optional parameters**. For example, if the user needs to group the parameters **Param2, Param3, and Param4**, we need to set the optional parameter custom property in the following format.
   ![image.png](https://support.boldreports.com/kb/attachment/article/13022/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgwMTYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.mE-SIRHRuSjuiOr9R3KCvW1NZQAs1GRaY---2bb9Hf4)
    ‘**OptionalGroupParameters**’ : ‘**ReportParameterName1,ReportParameterName2,ReportParameterName3……**’
 
 :::Info
The user must pass values for at least any one of the optional parameters to render the report.
 :::

4. Save the report. In our example, we have **four parameters (Param1, Param2, Param3, and Param4)**, in that we have set **Param2, Param3, and Param4** as **Optional parameters**. Now, we can pass the values for at least one optional parameter instead of passing values for all optional parameters **(Param2, Param3, and Param4)** to render the report.

    In the following example, we have passed the values for **at least one optional parameter**. Then, passed the values for all non-optional parameters too. So, the report rendered is fine.
    ![image.png](https://support.boldreports.com/kb/attachment/article/13022/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgwMjQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.S_WkPD2ok2eoWFsx0T-Zs_XYVZFnuYejlamVbt1BODk)
    ![image.png](https://support.boldreports.com/kb/attachment/article/13022/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgwMjMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.zaSmz1ZykY24r5bGGKU-sII1edOMN5T1ZS8tq5UQeZI)

    In the following example, we have passed the values only for all non-optional parameters and **haven't passed the values for at least one optional parameter**. In this case, it will pop up an error message to the user to pass values for at least one optional parameter to render the report.

    ![image.png](https://support.boldreports.com/kb/attachment/article/13022/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgwMjAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.63r2qN48veU0Qev6GtxNg-QzGK-MTXQi2tDsUJQ2jXc)


 :::Info
The ability to set the Mandatory Parameters feature was introduced in the BoldReports version 5.1.28. Ensure you have upgraded your Nuget packages and scripts to this version or later to access this feature.
 :::
 
 
 @(Embed){OptionalParam.rdl}(https://support.boldreports.com/kb/attachment/article/13022/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgwMjEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.mCyg59szdTDJ37hgCEe6fmVhQOEI588USv9Ac3IvYPc)


# How to Customize the Zoom Toolbar Item Dropdown in Bold Reports

In Bold Reports, the Zoom toolbar item dropdown in a report contains various dropdown values by default. You can customize this dropdown to meet your specific requirements by making changes to the CSS code in your application.

![image.png](https://support.boldreports.com/kb/attachment/article/13025/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgwMzIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.KCr_mV7qINu5gimjdVMn0WVWBAxkaXdekJBr12lX8nY)

To achieve this, you need to make changes to the CSS code in your application. Follow the steps below:

1. Locate the CSS file of your application responsible for report rendering.
2. Add the following CSS code to your CSS file:
     
     ```js
        .e-icon.e-arrow-sans-down {
          display: none;
        }
        
        #viewer_toolbar_zoom_popup li:nth-child(2) {
          display: none;
        }
     ```
3. Save the CSS file and reload your report.

The first line of CSS code hides the e-arrow-sans-down icon, which is the icon that is used to expand the Zoom Dropdown. The second line of CSS code hides the third item in the Zoom Dropdown, which is the 75% item.
![image.png](https://support.boldreports.com/kb/attachment/article/13025/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgwMzEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.zm8tBNu7pAPO9_TjqIZD6r6lRJbhaLqJJHI2_177fyY)

 
 :::Info
  By changing the **viewer_toolbar_zoom_popup li:nth-child(n)**, you can tailor the dropdown to meet your specific requirements. The value of **n** must be from **1 to 7**. The denoted values are listed in the following dropdown.
 :::

| n | Zoom Dropdown Items |
| ------ | ------ |
| 1| 50%|
| 2| 75%|
| 3| 100% |
| 4| 125%|
| 5| 150%|
| 6| 175%|
| 7| 200%|

To customize with the **only one Zoom dropdown**, you have to add the following CSS code to your CSS file:

![image.png](https://support.boldreports.com/kb/attachment/article/13025/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgwMzMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.5-lUTkYCH84T46KMxI5gEZ9x1ohuTIg7g83zGmYF60s)

```
    .e-icon.e-arrow-sans-down {
      display: none;
      }
    
    #viewer_toolbar_zoom_popup li:not(:nth-child(3)) {
      display: none;
      }
```

 
 :::Info
Using the not operator in the **viewer_toolbar_zoom_popup li:not(:nth-child(n))**, you can customize with only one Zoom dropdown to meet your requirements. The value of the **n** must be from **1 to 7**. The denoted values are listed in the above table. 
 :::

# How to Configure the Necessary Database Permissions for Using Bold Reports Report Viewer in IIS

While using the Bold Reports Report Viewer in IIS, when your reports are retrieving data from your SQL database, you have to give the **read** and **write** permission for that specific database to access that data in the Bold Reports Report Viewer in IIS. If it is not permitted for the user, it will result in an error. "**cannot open the database "Your_Database_Name" requested by the login. The login failed. Login failed for user '<Your_User_Name>'**" 
![image.png](https://support.boldreports.com/kb/attachment/article/13059/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg0MTgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.xqbdGEM7jlVS_UT4SdSA5YFyAy2tjlDpV3fLr45IPWw)

To resolve this, you have to give read and write access to that specific database. By following the steps outlined in this article, you can ensure that the appropriate permissions are granted to enable seamless data access in the Bold Reports Report Viewer within IIS.

1. Open SQL Server Management Studio or any other tool that allows you to manage your SQL Server database.
2. Connect to the SQL Server instance hosting your database.
    ![image.png](https://support.boldreports.com/kb/attachment/article/13059/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgyMDAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.my25MnIGgijM9uZKzKrpnNskztY-ajiFMsJTuz4yNWc)
3. Expand the "**Security**" folder and right-click on the "**Logins**" folder. Then select "**New Login**" to create a new login.
    ![image.png](https://support.boldreports.com/kb/attachment/article/13059/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgyMDMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.0PfnRZQGGatPl3JAWGFU9EapOIkIA4SXOYUwb10iB4E)
4. In the "**Login - New**" window, specify the login name as "**<Your_User_Name>**". In this example, we have given the user name as "**NT AUTHORITY\SYSTEM**".

 
 :::Info
User name will vary depending on your database. You have to add that specific user name as per your database.
 :::
5. Choose the authentication method based on your requirements (either Windows Authentication or SQL Server Authentication).
    ![image.png](https://support.boldreports.com/kb/attachment/article/13059/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgyNzkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.XkLuAm0-w8PH9bOTBmUBGrpaEbLb6aHaq35BFCDFQ_Y)
6. In the "User Mapping" section, select your "**Your_Database_Name**" database.
    ![image.png](https://support.boldreports.com/kb/attachment/article/13059/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgyODAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.JG_RlZInDYhPG-EO8lpTmsPBhBBzWMLH9-Yvihrri18)
7. Enable the appropriate roles and permissions for the "**NT AUTHORITY\SYSTEM**" login within the database. For example, you might grant the login "**db_datareader**" and "**db_datawriter**" roles, or assign specific permissions based on your application's requirements.
8. Click "**OK**" to create the login and apply the changes.
    ![image.png](https://support.boldreports.com/kb/attachment/article/13059/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgyODEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.vtYouUMVRBqNZjb6GYOlsGBLNMngmJlJD3czHHss_Hk)

When utilizing the Bold Reports Report Viewer in IIS to retrieve data from a SQL database, it is crucial to provide the appropriate read and write permissions to the database. This knowledge base article has outlined a step-by-step process for granting these permissions. By following these instructions, you can ensure a successful connection and access to the required data, resolving any potential login failures.

After providing the read and write permissions for that specific user the report will render fine without any error messages.
    ![image.png](https://support.boldreports.com/kb/attachment/article/13059/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg0MTkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.eWsnfQI7L0UwbEajyPo02-ZHJMdCvluTH9eJvUmMnfI)



# How to Fix "Failed to Retrieve Shared Data Set" Error in Bold Reports Report Viewer

When using the Bold Reports Report Viewer to load an SSRS report, you may encounter an error message stating, "Failed to Retrieve Shared Data Set." This error typically occurs when the user attempting to retrieve the data set from SSRS lacks the necessary permissions. Fortunately, resolving this issue is relatively straightforward. In this article, we will guide you through the steps to grant the required permissions and overcome the error.

1. Open the Folder Containing the Data Set in SSRS Report Server:
•	Access the SSRS Report Server by navigating to the appropriate URL in your web browser.
•	Locate and open the folder that contains the data set used by the report.
 
      ![img1.png](https://support.boldreports.com/kb/attachment/article/13060/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgyMTUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.tcMgGZgtCj3U-3gjd3Jpg9BK1frAo9kyNu1unr9eS1o)

2. Click the **Manage Folder** Option:
•	Once inside the desired folder, click on the "Manage Folder" button located in the upper right corner of the Report Server interface.
•	This will allow you to modify the folder's settings and permissions.
 
      ![img2.png](https://support.boldreports.com/kb/attachment/article/13060/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgyMTYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.0NoFpKTLfP5MX0pxQjP8mVzhjFtdGnThDciVZuLI8rM) 

3. Navigate to the **Security** Settings:
•	In the Manage Folder window, locate and click on the "**Security**" option.
•	By accessing the security settings, you can manage the permissions for the selected folder.
•	To resolve the issue, add or modify the user's permissions within the folder.
•	Click on the "Edit" button, depending on your required User.

      ![img3.png](https://support.boldreports.com/kb/attachment/article/13060/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgyMTkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.lZoBGI71vpkF-xQykf9XKuRO1SYy--_9iJYIImZW_B4)

4. Assign Appropriate Permissions:
•	Ensure that the user or group is assigned the "**Content Manager**" role, which includes the necessary permissions for retrieving the data set.
•	Apply the changes to save the new permissions.

      ![img4.png](https://support.boldreports.com/kb/attachment/article/13060/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgyMTgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.iWJQSaE9ShEnAL35-VXADC9GWMDI-9w1fTGpeDdwHIs)

5. Provide permission for the Data set itself also, as sometimes users may have permissions for the folder but not for the Data Set:
•      Click the More info button for the desired dataset and Select the Manage Option.
 
      ![img5.png](https://support.boldreports.com/kb/attachment/article/13060/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgyNjUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.76L03vRF-WhFlXk9DIKbwoUQ-UL5MUjrj3pdMCocJbw)

6. Navigate to the **Security** Settings:
•	In the Manage window, locate and click on the "**Security**" option.
•	By accessing the security settings, you can manage the permissions for the selected Data set.
•	To resolve the issue, add or modify the user's permissions for the Data set.
•	Click on the "Edit" button, depending on your required User.

      ![img6.png](https://support.boldreports.com/kb/attachment/article/13060/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgyNjYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.SXYeOC0CP0enQDN3_3zs79o3jWDj-GO-YpzC52fNSW4)

7. Assign Appropriate Permissions:
•	Ensure that the user or group is assigned the "**Content Manager**" role, which includes the necessary permissions for retrieving the data set.
•	Apply the changes to save the new permissions.
 
      ![img7.png](https://support.boldreports.com/kb/attachment/article/13060/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgyNjkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.4WdNu7ABjWHhx31IfqP74NZAKuFvmTnZKkJFfQTg_sE)

# How to Fix "Failed to Retrieve Shared Data Source" Error in Bold Reports Report Viewer

The **`"Failed to Retrieve Shared Data Source"`** error in the Bold Reports Report Viewer typically occurs when attempting to load reports that rely on shared data sources in a SQL Server Reporting Services (SSRS) environment. This error prevents the report from accessing the necessary data, resulting in a failure to render or preview the report. Below, we explore the common causes of this issue and provide detailed steps to resolve it, ensuring successful retrieval of the shared data source and proper report functionality.

#### The error can arise due to several underlying issues, including:
* **Misconfigured Data Source:** The shared data source configuration may contain incorrect connection strings, credentials, or references.
* **Connectivity Issues:** Network or server connectivity problems prevent communication between the Bold Reports Report Viewer and the SSRS server.
* **Insufficient Permissions:** The user account accessing the SSRS server lacks the necessary permissions to retrieve the shared data source.
* **Corrupted or Missing Data Source:** The shared data source may not exist on the server, may be incorrectly referenced, or may have been corrupted.
* **Report Deployment Issues:** The report or its associated data source was not properly deployed to the Bold Reports server.

By systematically addressing these potential causes, you can resolve the error and restore report functionality.

#### Steps to Fix the Error
1. **Check Data Source Configuration in the Report** Ensure the report is correctly [linked to the shared data source](https://help.boldreports.com/enterprise-reporting/designer-guide/report-designer/manage-data/datasource/link-a-shared-data-source/) and that the configuration is valid.
Verify the shared data source reference and ensure the connection string (e.g., server, database, authentication) is correct.
2. **Test Connectivity and Restart Services** Rule out network or server issues that may prevent the Bold Reports Report Viewer from accessing the SSRS server.
Verify network connectivity between Bold Reports server. Ensure the server database is accessible via SSMS the restart the application.
3. **Verify and Grant Permissions on the SSRS Data Source Folder** Ensure the user account running the Bold Reports Report Viewer has sufficient [permissions to access](https://help.boldreports.com/enterprise-reporting/administrator-guide/manage-permissions/) the shared data source.
Confirm the user or service account has Read and Execute permissions. If lacks, add the permissions if needed and test the report.
4. **Embed or Recreate the Data Source** If the shared data source cannot be retrieved, embed the data source directly in the report or recreate it to bypass the issue.
Recreate the shared data source on the Bold Reports server with correct settings and permissions and update the report using the newly created DataSource
5.  **Deploy the Report to the Bold Reports Server** Ensure the report and its shared data source are correctly deployed to the Bold Reports server.

The "Failed to Retrieve Shared Data Source" error in Bold Reports Report Viewer can be resolved by systematically checking the data source configuration, permissions, connectivity, and deployment settings. By following the detailed steps outlined above, you can identify and address the root cause of the error, ensuring your reports render correctly and data is retrieved successfully.

# How to Add a Serial Number in a Matrix

In a matrix, a serial number refers to a unique identifier assigned to each group of rows or columns. This serial number has various uses, such as organizing or labeling the groups within the matrix.

To add a serial number to a matrix, you need to assign a unique identifier to each element in the matrix structure. This serial number allows for easy referencing and access to individual elements. Follow these steps to add a serial number column to the Matrix in Bold Reports:

1. Locate the cell in the matrix where you want the serial number to appear.

2. Click on the cell to select it. In the properties panel or toolbar, find the `Expression` option for the cell.

3. Click on the **Expression** option to open the expression editor. Enter the following expression to generate the serial number and click `OK`.

    ```
      =RunningValue(Fields!ProductID.Value, CountDistinct, "DataSet1")
    ```
    
    ![Running_value.png](https://support.boldreports.com/kb/attachment/article/13064/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgyNDciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Ttj_M4wRkd2lEq7m-u0T7W98HKRHH_RdfzLp5hf-EM0)

:::Info
**Note:**   This expression uses the **RunningValue** function to calculate a running total or aggregate within a specified scope. It generates a unique number for each row in the matrix.
:::

4. Save and preview the report to see the serial number column in action.
![Output.png](https://support.boldreports.com/kb/attachment/article/13064/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg3MDgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.GgAalR0SCN_auEEv5PAXGu9AiGhyphTfYznhYSCGJUk)
 
By following these steps, you will be able to add a serial number column to a matrix in Bold Reports using the RunningValue function. The serial numbers will be generated based on the specified field and the running value calculation.

# Displaying Decimal Places in Bold Reports

To enhance the clarity of numerical values, you have the option to customize decimal places in Bold Reports. This allows you to format numbers according to your specific requirements. Here's a step-by-step guide on how to [format](https://help.boldreports.com/enterprise-reporting/designer-guide/report-designer/compose-report/format-data/#format-numbers) numbers with decimal places:

1. Navigate to the report item where you want to display decimal places.
2. Identify the field that contains the values you want to format. For example, let's assume the field is called "value".
    ![image.png](https://support.boldreports.com/kb/attachment/article/13065/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg1MjciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.UM_X5YGIoPlQi5M1HW8noWsrxSpEm0_SKD2iz0vObEA)

3. Click on the **Format** option and modify the decimal places as per your preference.
    ![image.png](https://support.boldreports.com/kb/attachment/article/13065/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg1MjgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.pCDdg_f_qc2EnYuDCQQT4eyN7aQPakKyyGH0few67Fo)

4. Save the changes to the report design and preview the report to ensure that the values in the "value" field are displayed with the desired decimal places.
    ![image.png](https://support.boldreports.com/kb/attachment/article/13065/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg1MzAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.H1Gih3QFeOnCS534s0oh_lhlsmf-Jmo2ihWrSdWTAxw)

##### Displaying decimal places within text values:
1. Edit the expression of the text box and include the following expression:
    ![image.png](https://support.boldreports.com/kb/attachment/article/13065/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg1MzEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.pFCLCvvMsLCErDy_MzAMUgExd3taQAA8p-9210xOHc0)

2. Include the expression below to display only two decimal places. You can adjust the decimal places by modifying the value in the "Round" expression.
    ![image.png](https://support.boldreports.com/kb/attachment/article/13065/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg1MzIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.f7Mq7WLZ78arCSlx02OW-CYQbdL8uR4OmDVvFfsSV6k)
 ```vb
="Total is: " + Round(Sum(Fields!value.Value, "DataSet1"), 2)
 ```
    
3. Save the changes to the report design and preview the report to ensure that the values in the "value" field are displayed with only two decimal places.
    ![image.png](https://support.boldreports.com/kb/attachment/article/13065/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg1MzYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.kBfrmcpedAF9kfya35g03wLzM2QxM0M7fob7qFUXkxI)
 
 :::Info
Note: Make sure to adjust the expression based on your specific field name and report design. You can download the sample report from [here](https://support.boldreports.com/kb/attachment/article/13065/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg1MzciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.zaJX67yDEHRZV98lVuYiWLAIvEj90Z_17S5IIAKV5hM).
 :::


# How to Hide the View Report Button in Bold Reports

In Bold Reports, by default, the **View Report** button will be shown in the report preview in the parameter panel. We don't have any API to hide the **View Report** button alone. If you want to hide the View Report button, hide the **Parameter** pane in the Toolbar items, and the parameters will not show along with the **View Report** button. You can hide or show it per your requirements.

![image.png](https://support.boldreports.com/kb/attachment/article/13068/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg0MzQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.imfIQvMp9TgE0yc0EIvpeQsXu6C-Ya3XZqQlBXIuAYs)

 
 :::Info
By doing so, you must pass the **[default values](https://help.boldreports.com/standalone-report-designer/designer-guide/report-parameters/define-default-values-for-parameter/)** for **all the parameters** available in the report.
 :::

Follow these steps to hide the View Report button by hiding the Parameter pane in the toolbar item settings:

1. To hide toolbar items, set the **toolbar-settings** property. The following code can be used in **index.cshtml** file to remove the parameter option from the toolbar and hide the parameter block in the Report Viewer at client side.
    ```
    <bold-report-viewer id="viewer" report-service-url="/api/ReportViewer" processing-mode="Remote" toolbar-settings="ViewBag.toolbarSettings"></bold-report-viewer>
    ```
2. Add the following code in your **HomeController.cs** file to hide the parameter block in the Report Viewer at the server side.
    ```
    public ActionResult Index()
    {
       ViewBag.toolbarSettings = new BoldReports.Models.ReportViewer.ToolbarSettings();
       ViewBag.toolbarSettings.Items = BoldReports.ReportViewerEnums.ToolbarItems.All
                                                & ~BoldReports.ReportViewerEnums.ToolbarItems.Parameters;
       return View();
    }
    ```
3. Now, save and run the application. The report will be rendered by hiding the **View Report** button along with the parameter pane in the toolbar items.
    ![image.png](https://support.boldreports.com/kb/attachment/article/13068/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg0MzciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.H8NbN19pkQXet7VJ4jYzhZkF_spT4biz9zn5GTxjgEw)


If you want to hide only the View Report button and need to show the parameters toolbar item in the Report Viewer preview, make changes to the CSS code in your application. Follow these steps:

1. Locate the CSS file of your application responsible for report rendering.
2. Look for the CSS selector **.e-reportviewer-viewreport**, which targets the view-report button.
3. Add the following CSS code within the .e-reportviewer-viewreport selector.
    ```
    .e-reportviewer-viewreport {
        display: none !important;
    }
    ```
4. Save the CSS file.
5. By setting the **.e-reportviewer-viewreport** selector to **display: none**, the View Report button will be hidden.
    ![image.png](https://support.boldreports.com/kb/attachment/article/13068/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg0NDQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.bqk18wC4vXgMre-2NI748IA88wFq02plnqd2kpMKx98)
 
 :::Info
This modification will override the default view of the View Report button and apply the hidden property to the button.
 :::

# How to Change the Export File Name with the Parameter Value

To enhance the user experience and facilitate the identification and organization of exported reports, you can customize the export file name based on parameter values. By following the steps below, you will be able to provide more meaningful and dynamic names to your exported files:


1. Register the `onRenderingComplete`and `onExportItemClick` methods for **renderingComplete** and **exportItemClick** events, respectively. Here's an example code sample for this:
     
 ```js
  $(function () {
	    var reportName = '';
            $("#viewer").boldReportViewer({
                reportServiceUrl: "https://demos.boldreports.com/services/api/ReportViewer",
                reportPath: '~/Resources/docs/sales-order-detail.rdl',
                renderingComplete: onRenderingComplete,
                exportItemClick: onExportItemClick
            });
        });
 ```


2. Add the following code sample to handle the [renderingComplete](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/api-reference/events/#renderingcomplete) event, which is triggered when the report rendering is complete:
     
 ```js
   function onRenderingComplete(event) {	
        var parameters = event.reportParameters;
        if (parameters) {
            for (var i = 0; i < parameters.length; i++) {
                if (parameters[i].name == "SalesOrderNumber") {
                    reportName = parameters[i].values[0];
                }
            }
        }
    }
 ```


3. Include the following code sample to handle the [exportItemClick](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-viewer/api-reference/events/#exportitemclick)  event, which is triggered when an export item is clicked:
     
 ```js
function onExportItemClick(event) {
    if(reportName != null && reportName != '' && reportName != undefined){
    event.fileName = reportName;
    }
}
 ```


4. Run the application and change the parameter value. When you export the report, the exported file name will be dynamically set based on the parameter value.
    ![image.png](https://support.boldreports.com/kb/attachment/article/13073/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgzMTgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.6atXvnG7xKv9_cr3u3vGZlcUhMtiflvb8j_W6Rqnz_0)


 :::Info
You can download the sample application from [here](https://support.boldreports.com/kb/attachment/article/13073/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg1NDIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.0Ua47DM9eYcR9RKBpPMywGDNFNIpehXq0tJCnIb-QWE)
 :::

# Adding Custom Fonts in Standalone Report Designer

The Bold Reports Standalone Report Designer has a comprehensive collection of default fonts to cater to various reporting needs. However, circumstances may arise where you require the inclusion of specific fonts within the Report Designer. To address this, Bold Reports offers a straightforward process for adding custom fonts to enhance your reporting capabilities.

The following comprehensive instructions will guide you through the process of incorporating custom fonts into the Standalone Report Designer.

1. Download the custom fonts and add them to the following mentioned location specified in the designer application.

   **{Installed Location}\Program Files (x86)\Bold Reports\Report Designer\CustomFonts**
 
2. Add the entry for the custom fonts to the **config.json** file located in the following location as shown in the following snapshot.

    **{Installed Location}\Program Files (x86)\Bold Reports\Report Designer\CustomFonts**

    ![image.png](https://support.boldreports.com/kb/attachment/article/13085/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg0MTciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.KAYsLhfEWsaIuagl434_LlHQW6OvPyv54gboDlvKOjo)

3. The report designer application has successfully integrated custom fonts as depicted in the following snapshot.

   ![image.png](https://support.boldreports.com/kb/attachment/article/13085/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg0MjgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.FXOcmjCSyyWBZoXy_kOK5A8qJ7kUsWSfeVk0s7H9U58)
  




# How to Show Percentage Values in a Pie Chart in Bold Reports

In Bold Reports, you can display the percentage values in a pie chart report item. By default, pie charts in Bold Reports do not show percentage values. However, you can enable the "**Show Data Label**" property and set the format to "**#PERCENT**" to display the percentage values in the pie chart. This feature is particularly useful when comparing different data sets using pie charts, as it allows users to easily see the proportion of each data point relation to the total.

![image.png](https://support.boldreports.com/kb/attachment/article/13115/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg1MjMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.2DX6hrI0rbdXp4IDP9lrRexdCg6J0btBG4q_9a5RZwg)

Follow the below steps to achieve this requirement:

1. Create a report with a [pie chart report-item](https://help.boldreports.com/standalone-report-designer/designer-guide/report-items/chart/pie-chart/) and provide the necessary data for the chart.
2. Once the data has been provided for the pie chart report item, navigate to the "**Choose Series**" section in the Properties pane and click the "**Edit**" button.
    ![image.png](https://support.boldreports.com/kb/attachment/article/13115/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg1MTYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.0YH4dkebeeIIsFIU4gxIi6LMJfXKZW56loSqojpR9fA)
 
 :::Info
After providing value for the chart report item only, the **Choose Series** values will be assigned.
 :::

3. Once clicked on the Edit button. The Series properties will be shown like below snap.
    ![image.png](https://support.boldreports.com/kb/attachment/article/13115/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg1MTciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.eAEEwrF6DnJawqjGtaZuKlIZud-mdVoHJL6Hz7LadeQ)
4. In the "**Data Label settings**" section, check the "**Show Data Label**" checkbox.
    ![image.png](https://support.boldreports.com/kb/attachment/article/13115/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg1MTgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.-pQiCViEAdGfEBUMaQK41LszS-z19kLP9rauC1tnHnM)
6. Enabling the **Show Data Label** will reveal more properties. Now, navigate to the **Label** property and set it to "**#PERCENT**" to display the percentage values.
    ![image.png](https://support.boldreports.com/kb/attachment/article/13115/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg1MTkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.pZhEuiX_0MmuHj3vN9Wqz1USJCI_oDFImniIwYLycPo)
 
 :::Info
You can customize the label format as per your requirement. By default, **#PERCENT** will be applied for pie chart report item.
 :::

7. Save and preview the report. The percentage values will now be shown in the pie chart.
    ![image.png](https://support.boldreports.com/kb/attachment/article/13115/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg1MjAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.8FOuXVEwNBmRjOsnJssGfEJHjXxvnYd507CHISNFAmI)

 
 :::Info
For pie chart report item, the **Label** property is set as **#PERCENT** by default. For other chart report items, you need to manually set the **Label** property as "**#PERCENT**". Also, for other chart report items, you must uncheck the "**UseValueAsLabel**" checkbox.
 :::

![image.png](https://support.boldreports.com/kb/attachment/article/13115/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg1MjIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.DPEboK8gJr2EAz6Qvs7bqO58Hb9fPiv-_gb26Ipm400)


 @(Embed){PieChartPercentageValue.rdl}(https://support.boldreports.com/kb/attachment/article/13115/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg1MjUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.vBR5riXnaN0beUt-oNRlur4sBRxtxPSNP-uSKc2bGzM)

# Adding Date, Time, and Page Number to the Footer of the Pages in Bold Reports

Users can enhance the quality of their reports by including the current date, time, and page number. This provides readers with up-to-date information, which is especially valuable for time-sensitive reports like daily sales reports, event summaries, or real-time analytics. Moreover, including the page number allows readers to easily navigate multi-page documents, reference specific pages, cite information, or find relevant sections quickly.

To implement these features, follow the step-by-step guide below:

1. Drag and drop a textbox report item into the footer area of the report.
    ![image.png](https://support.boldreports.com/kb/attachment/article/13118/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg1NDkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.FlzT_OFZYO-IBllXR6tak7Z5VpWsQN_Ql-RE4lcJGrM)
    


2.  Right-click the textbox, select **Expression** for the textbox, and use the following expressions to display the current date and time in the textbox.

    ```
    =Globals!ExecutionTime
    ```
    
    
    ![image.png](https://support.boldreports.com/kb/attachment/article/13118/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg1NTAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.v_s5TKdbuTRGa82x3nqZ-RyYnh4JBrk6AwFMtnzXHOY)
      




   
    
3. Use the following expression to show the page number of the report in the footer.

    ```
    ="Page "&Globals!PageNumber &" / "&Globals!TotalPages
    ```

      ![image.png](https://support.boldreports.com/kb/attachment/article/13118/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg1NTYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.9Acrqn8NYZlxFc4VyZba_N9rAa1r82IYyLsgM-TT170)
        
    
      
   
4. After applying the expression in the textbox, click the preview button to see the output.

     ![image.png](https://support.boldreports.com/kb/attachment/article/13118/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg1NTciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.oRdOSXbl8CUOf4usdJlCoIK-HdN9_f7mxLMLiLk4M8E)

5. Click [here](https://support.boldreports.com/kb/attachment/article/13118/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg4NzUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.UA_Rp_In3YQZaH1gKFpPKbI8Isky-FtZ4UsVKKZYPKQ) to download the sample report.
 

 


# Displaying Subreports in a Blazor Application

A subreport is a report that is embedded within the main report. It allows you to display detailed information related to the main report's data in a separate report area. This feature is particularly useful when you want to provide additional context or display related data without cluttering the main report. The following steps will help you to render a subreport in a Blazor application.

1. Add the subreport and main reports to the application's `wwwroot/Resources` folder. In this knowledge base, the already created reports are used. You can refer to the [Create RDL Report](https://help.boldreports.com/embedded-reporting/blazor-reporting/report-viewer/add-report-viewer-to-a-blazor-application/) section or [Create RDLC Report](https://help.boldreports.com/embedded-reporting/blazor-reporting/report-viewer/rdlc-report/) section for detailed instructions.

 
 :::Info
Download the **Side_By_SideMainReport.rdl** and **Side_By_SideSubReport.rdl** reports from [here](https://www.syncfusion.com/downloads/support/directtrac/general/ze/Subreports-1004880284). 
 :::

2. The following code example demonstrates how to load a subreport in the Report Viewer on the client side.
 
 ```js
@page "/"

<pagetitle>Index</pagetitle>

@using Microsoft.JSInterop
@using Microsoft.AspNetCore.Components
@inject IJSRuntime JSRuntime
@using BlazorServerNet6.Data;

<div id="report-viewer" style="width: 100%;height: 950px"></div>

@code {
    // ReportViewer options
    BoldReportViewerOptions viewerOptions = new BoldReportViewerOptions();

    // Used to render the Bold Report Viewer component in Blazor page.
    public async void RenderReportViewer()
    {
        viewerOptions.ReportName = "Side_By_SideMainReport.rdl";
        viewerOptions.ServiceURL = "/api/BoldReportsAPI";
        await JSRuntime.InvokeVoidAsync("BoldReports.RenderViewer", "report-viewer", viewerOptions);
    }
    // Initial rendering of Bold Report Viewer
    protected override void OnAfterRender(bool firstRender)
    {
        RenderReportViewer();
    }
}
 ```

![image.png](https://support.boldreports.com/kb/attachment/article/13124/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEyNDExIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.o7emjnGvPotuSDRbvCdd6sTzQJeGqHaK9pSrapheXPM)


3. The following code example demonstrates how to load a subreport in a Blazor server application.
     
 ```cs
public void OnInitReportOptions(ReportViewerOptions reportOption)
    {
        string basePath = _hostingEnvironment.WebRootPath;
        // Here, we have loaded the Side_By_SideSubReport.rdl report from application the folder wwwroot\Resources and loads the sub report stream.
        if (reportOption.SubReportModel != null)
        {
            FileStream inputSubStream = new FileStream(basePath + @"\Resources\"+ reportOption.SubReportModel.ReportPath+".rdl", FileMode.Open, FileAccess.Read);
            MemoryStream SubStream = new MemoryStream();
            inputSubStream.CopyTo(SubStream);
            SubStream.Position = 0;
            inputSubStream.Close();
            reportOption.SubReportModel.Stream = SubStream;
        }
        else
        {
            FileStream inputStream = new FileStream(basePath + @"\Resources\" + reportOption.ReportModel.ReportPath, FileMode.Open, FileAccess.Read);
            MemoryStream reportStream = new MemoryStream();
            inputStream.CopyTo(reportStream);
            reportStream.Position = 0;
            inputStream.Close();
            reportOption.ReportModel.Stream = reportStream;
        }
    }
 ```

![image.png](https://support.boldreports.com/kb/attachment/article/13124/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEyNDEyIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.2jk-g7dzBsOUuuA9K7zaYUdU1iwRL7pz0SxHxKBNCMc)

The main report will render with the embedded subreport.
![image.png](https://support.boldreports.com/kb/attachment/article/13124/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEwMTU5Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.BHOYcm-mp4Xbbfw_uCSue-aM3z2eYl5DxQOoq0koiS8)
 
 :::Info
You can download the sample application from [here](https://support.boldreports.com/kb/attachment/article/13124/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEwMTYwIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.M02JwjeEU_fKqWzGDtyVLiyysVUnlYcuXOSe0a-LYwk).
 :::

# How to Set Specific Color for Specific Values in Chart Series

Creating visually appealing and informative charts is essential for presenting data effectively. Customizing the chart series colors in Bold Reports can significantly enhance the clarity and impact of your charts, making it easier for viewers to interpret the information.

To set a particular color for a specific value in the chart series of the reports, follow these instructions:

1. Drag and drop the bar chart report items from the widget panel as shown in the image below.

    ![image.png](https://support.boldreports.com/kb/attachment/article/13128/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg2MDEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Pvzuu_xbGf0qIE0NxTBeDuuGke9Y_E3OovDLvfgaXTA)

2. Click on the chart items and then set the data set values for the chart accordingly.

    ![image.png](https://support.boldreports.com/kb/attachment/article/13128/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg2MDIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.8fn5cPWNHLk79M2aQ_HQMwFl4owyXMjFIN3swgc4jDk)

3. Click the preview button to see the output in the report viewer.

    ![image.png](https://support.boldreports.com/kb/attachment/article/13128/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg2MDMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.rJHCOYqOBRBAo9_WYKyXsr2FwUGxsaA38hGZ2kbTYlE)

4. To set a specific color for the particular value in the chart series, choose the **Chart Series** property in the **Basic Settings** option, as shown in the image below.

    ![image.png](https://support.boldreports.com/kb/attachment/article/13128/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg2MDQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.CtD5PdOO3ASZ3THLYNXwj9DhypFJ1SPGdxWYv6FG1nk)

5. Select the expression option in the **Series Color** property of the chart.

    ![image.png](https://support.boldreports.com/kb/attachment/article/13128/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjkyOTkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.csdAl0i-KjVhUQP-vpxDR6NREcMHTnTsscAJM9sJuJo)

   
 6. Use an expression like the one below mentioned in the **Series Color** property to show the specific color for a particular value.

    ```
    =Switch(Fields!Gender.Value="M","Red",Fields!Gender.Value="F","Pink") 
    ```

    ![image.png](https://support.boldreports.com/kb/attachment/article/13128/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjkzMDAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.KKDHvxlA7RY-ITGXOvPuhvwhPW25b1p3-Yfw5lvIpd0)

7.  After setting the expression, click the preview button again to see the output with different colors for different values in the series.

    ![image.png](https://support.boldreports.com/kb/attachment/article/13128/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjkzMDEiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.2x7JrCg2DwnO5S-g9wcisRhZ5DHDJSKQ1BVZLIvgiv0)
    
8. Click [here](https://support.boldreports.com/kb/attachment/article/13128/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjkzMDIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.fyX1ZXsgc5auGXug5XUuue4A0HiS1928Yli7xQRJnqU) to download the sample report.




# Bold Reports vs. SSRS: A Modern Alternative for Efficient Reporting

In the realm of business intelligence, selecting the right reporting tool is vital for organizations to generate insightful, actionable reports. SQL Server Reporting Services (SSRS) has long been a trusted platform for creating and delivering reports. However, as technology evolves and efficiency becomes paramount, SSRS’s time-intensive processes can feel outdated. 

**Bold Reports**, a modern alternative designed to streamline report creation and enhance user experience. This guide compares the two tools, highlighting how Bold Reports saves time and simplifies workflows for developers and end-users alike.

## Key Feature Comparison

| **Feature**                | **Bold Reports**                                                                                   | **SSRS**                                                                                   |
|----------------------------|---------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------|
| **Layout Design**          | Drag-and-drop designer for quick, code-free creation of complex layouts.                          | Requires custom code for advanced layouts, increasing effort and expertise needed.         |
| **Image Display**          | Native support for embedding images, enhancing visuals without coding.                           | No built-in image support; requires additional coding, slowing the process.               |
| **User Interface (UI)**    | Modern, intuitive UI simplifies report interaction; no custom UI coding needed.                  | Traditional, less user-friendly UI; customization is challenging and time-consuming.      |
| **Embedding in Web Apps**  | Easy embedding via Bold Reports SDK with a simple API. [See SDK Docs](https://help.boldreports.com/embedded-reporting/javascript-reporting/). | No native embedding; requires custom code, adding complexity and time.                   |
| **Scheduling Reports**     | User-friendly scheduler automates reports at specific times or intervals.                        | Scheduling available but less intuitive, requiring more setup effort.                     |
| **Sharing Reports**        | Streamlined sharing via email, FTP, or Bold Reports Cloud. [See Sharing Guide](https://help.boldreports.com/report-server/sharing-reports/){target="_blank"}. | Sharing supported but more complex and time-consuming.                                   |
| **Server Database**        | No server database needed, reducing setup and maintenance overhead.                              | Relies on SQL Server database, adding complexity and management time.                     |
| **Web-Based Designer**     | Fully web-based, accessible from any browser—no extra software required.  | Requires Visual Studio or SQL Server Data Tools, leading to setup time and costs.        |
| **Multitenant Support**    | Supports multiple tenants in one instance, simplifying management. | Requires separate servers per client, increasing deployment and management effort.       |

## Why Choose Bold Reports?
Bold Reports outshines SSRS by offering a suite of time-saving features, a modern interface, and a simplified workflow. Its drag-and-drop designer, native image support, and web-based accessibility reduce development effort, while embedding options, scheduling, and multitenancy streamline deployment and management. Unlike SSRS, which often demands coding and additional tools, Bold Reports empowers developers to focus on insights rather than infrastructure.

## Conclusion
For organizations seeking efficiency and ease in reporting, Bold Reports stands as a superior alternative to SSRS. It reduces manual effort, enhances usability, and delivers a reporting experience designed for modern business demands.

# Comparison of Bold Reports and SSRS Reporting Control

**Bold Reports** and **SSRS Reporting Control** are reporting tools used to create, manage, and deliver data-driven reports.

Bold Reports is developed by Syncfusion and supports modern, flexible, and cloud-friendly workflows with flexible deployment options. SSRS Reporting Control is a Microsoft reporting solution integrated with SQL Server and is commonly used in Microsoft-based environments.

Although both tools serve similar reporting purposes, they differ significantly in their approach to report design, data connectivity, and integration capabilities. This article compares Bold Reports and SSRS Reporting Control to help users understand their differences.

<table>
<tbody><tr>
<td width="20%">

**Basis**

</td>

<td>

**Bold Reports**

</td>

<td width="40%">

**SSRS**

</td>
</tr>

<tr>
<td>
Deployment Platforms
</td>

<td>

Web-based, on-premises, cloud, mobile, cross-platform i.e., [Windows](https://help.boldreports.com/enterprise-reporting/administrator-guide/installation/windows-installer/), [Linux](https://help.boldreports.com/enterprise-reporting/administrator-guide/installation/deploy-in-linux/), [Docker](https://help.boldreports.com/enterprise-reporting/administrator-guide/installation/deploy-in-docker/), [Kubernetes](https://help.boldreports.com/enterprise-reporting/administrator-guide/installation/deploy-in-kubernetes/) and much more.
</td>

<td>

On-premises
</td>
</tr>

<tr>
<td>

DataSource Connection

</td>



<td>

Supports 30+ data sources including SQL, Oracle, MySQL, JSON, Excel, CSV, and many others. Explore the full range through our [connectors documentation](https://help.boldreports.com/enterprise-reporting/designer-guide/report-designer/manage-data/data-connectors/).
</td>

<td>

Primarily SQL
</td>
</tr>

<tr>
<td>

Cloud Deployment Options

</td>


<td>
Supports deployment in cloud environments such as Azure, AWS, and other clouds
</td>

<td>

Does not provide native cloud deployment support.
</td>
</tr>

<tr>
<td>

Layout Design	

</td>


<td>
Drag-and-drop designer
</td>

<td>

Primarily code-based report design.
</td>
</tr>

<tr>
<td>

Image Display

</td>


<td>
Supported.
</td>

<td>

Not supported natively.
</td>
</tr>

<tr>
<td>

User Interface

</td>


<td>
Modern, responsive UI with intuitive navigation.
</td>

<td>

Traditional, dated interface.
</td>
</tr>

<tr>
<td>

Server Database

</td>


<td>
Not Required
</td>

<td>

Required
</td>
</tr>

<tr>
<td>

Authentication

</td>


<td>
Supports OAuth 2.0, Azure Active Directory, OpenID Connect, and Office 365 authentication for secure, flexible access control.
</td>

<td>

Supports Windows authentication.
</td>
</tr>
<tr>

<td>

Pricing

</td>

<td>

Significant Subscription plan with comprehensive features tailored for enterprise needs. Check the [pricing page](https://www.boldreports.com/pricing/) for detailed pricing information.

<td>

Included with SQL Server licensing.
</tr>
</tbody></table>

Both Bold Reports and SSRS Reporting Control are reporting tools, each with its own strengths and limitations. Bold Reports provides features for report design and data visualization, making it suitable for users who require a flexible reporting solution, while SSRS Reporting Control may be suitable for organizations that require customization and integration capabilities.

# How to display PostgreSQL database Datetime in specific timezones in Bold Reports

In Bold Reports, when using the [PostgreSQL](https://help.boldreports.com/standalone-report-designer/designer-guide/manage-data/data-connectors/postgresql-data-source/) database, datetime values may be in a different timezone than the desired display timezone. Bold Reports does not handle datetime or timezone-related aspects on its own; Instead, it directly fetches the table data from the PostgreSQL provider and displays it in the preview area. This purely depends on the application's timezone.

To ensure that datetime values are displayed in a specific timezone in Bold Reports, you can address it at the query level. For example, if your database stores datetime values in **UTC** timezone and a user fetches that data in the '**US/Eastern**' timezone, it may display the wrong datetime values in the report rendering process, as it uses the user's machine timezone. To resolve this issue, you can address it at the query level. If you are in the '**US/Eastern**' timezone, you can set the same timezone in your query. This ensures that the correct time is consistently retrieved in both PostgreSQL and Bold Reports.

Here is an example query that demonstrates how to convert the current timestamp to the '**US/Eastern**' timezone:

```
SELECT
    (current_timestamp AT time zone 'US/Eastern')::timestamp with time zone AS withTimeZone,
    (current_timestamp AT time zone 'US/Eastern')::timestamp AS withoutTimeZone;
```

![image.png](https://support.boldreports.com/kb/attachment/article/13135/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg2NTAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.8qU8L5-ZgcmUsNVVYYuj6oeUEtjV89CqBK4ZqhMaKDM)

In this query, the **withTimeZone** column contains the current timestamp in the 'US/Eastern' timezone, while the **withoutTimeZone** column contains the current timestamp in UTC.

 
 :::Info
To display datetime in a different timezone in Bold Reports, you can address it at the query level by setting the timezone in your query. This ensures that the correct time is consistently retrieved in both PostgreSQL and Bold Reports.
 :::

**Use Cases:**

1. This solution can be used for any user who wants to display datetime in a different timezone in Bold Reports.
2. It is especially useful for users located in different timezones than the application's default timezone.


When encountering timezone differences between PostgreSQL and Bold Reports, it is recommended to address the issue at the query level. By using the **AT TIME ZONE** function in the SQL query, datetime values can be converted to the desired timezone. This ensures consistent and accurate datetime display in Bold Reports. The provided example query demonstrates how to convert datetime values to a specific timezone, but users can modify it according to their requirements. By following this generic solution, users can overcome timezone-related challenges when displaying dates in Bold Reports.

# How to Filter Data at the Query Designer Level

In Bold Reports, query filtering allows you to restrict the amount of data retrieved from a database. To do this, you need to use the Query Filter Dialog. This dialog allows you to specify the conditions that data must meet in order to be included in the report. This guide will walk you through the steps for filtering data in the query filter dialog.

### Filtering Data at the Query Level

To filter data at the query level, please follow the steps below:
1. Click on the filter icon to open the query filter dialog.
 ![image_23.png](https://support.boldreports.com/kb/attachment/article/13138/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjExMTcyIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.sF5TUZe0dtDKEGyliiNarBYsuCgL6PgymAmr--b1hzM)
2. To add a filter, click on the **ADD** icon in the query filter dialog.
![image.png](https://support.boldreports.com/kb/attachment/article/13138/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEwODY2Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.zm0TczFhgn8-wAtbXLbHVUKlP1Zsvrh8Ig9Dsip2Olc)
3. Select the table field and the operation type from the dropdown list, respectively. Enter the values in the value fields. Refer to the screenshot below for clarification.
![image.png](https://support.boldreports.com/kb/attachment/article/13138/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEwODc2Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.OrfeKtOqqLmoG95SLujqiwmkgY7aS843Fl0H7O-lbyQ)
4. The **Include as Parameter** checkbox allows you to include the condition set in the query filter as a parameter. While previewing the report, you can enter a value in the parameter. The value will then be used to filter the data in the query.
![image.png](https://support.boldreports.com/kb/attachment/article/13138/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEwODg3Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.jLaeVS183WQFwoG8L6PBpPkMd_LCN_qrrxDncsUgLvE)
The parameter will be added while previewing the report.
 ![Group_2.png](https://support.boldreports.com/kb/attachment/article/13138/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjExMTc5Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.olClXnnB1VGEbRNsMl7LK5NWHmCniqWylsAqXSyXIUE)
5. The **AND** and **OR** operators can be used to add multiple filters.
![image.png](https://support.boldreports.com/kb/attachment/article/13138/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEwODc3Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.QjcCXcXPkHZUB9VhQrb47DnZ2ozQlYgt1U2O5DkYN8w)
6.  In Bold Reports, you can also have the option to filter data using the code mode functionality. This allows you to define the filtering logic according to your report requirements.
 ![image_22.png](https://support.boldreports.com/kb/attachment/article/13138/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjExMTczIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.1uSAqkwGRonDjp36MGXLeqnXSWcyUzEs4Q7rgX0Uiyk)
7.  After adding the filters, click the **OK** button, and then the **Finish** button.
 
 :::Info
You can download a sample report from [here](https://support.boldreports.com/kb/attachment/article/13138/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEwOTA4Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.1CdzX84tbfBelmRsqX94bVFfCxXJZlBDDLLPsa2fZVo). 
 :::



# Customizing the Report Designer Toolbar in Bold Reports

The Report Designer toolbar has a set of icons that enable you to perform common design operations, significantly enhancing your report creation process. These icons are designed to optimize your efficiency and streamline the design workflow, allowing you to create a report with ease. You can customize the designer toolbar to meet your specifications, creating a personalized workspace that caters to your unique needs.

![image.png](https://support.boldreports.com/kb/attachment/article/13139/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEwODAxIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.RV7o-DKrc8jJqEoiJa_jePu9fXJFO4eSw8XwD6BUVuU)

#### Changing the Toolbar Appearance
To customize the toolbar, use the **toolbarSettings** property. You can achieve this by modifying the CSS style snippet below, replacing [ToolbarItem](https://help.boldreports.com/embedded-reporting/javascript-reporting/report-designer/api-reference/properties/toolbarSettings/#items) which the actual toolbar item name.
 ```js
.e-rptdesigner-toolbar- &lt;<toolbaritem>&gt;:before{
   // add your customization
} 
 ```

The table below shows the list of items in the toolbar and their corresponding Styles CSS Names:
| ToolName             | Toolbar Style CSS Name                                                                          | Toolbar Item Image |
| --------------------------------------------------| ------------------------------------------------------------- | ------------------------------------------------------------- |
| Copy | .e-rptdesigner-toolbar-copy |  ![image.png](https://support.boldreports.com/kb/attachment/article/13139/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEwODEzIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.5dTwofZLSMKzTTAdoRYCsarP6pgR_zZ_bUgBu6Dlygw) |
| Cut | .e-rptdesigner-toolbar-cut |  ![image.png](https://support.boldreports.com/kb/attachment/article/13139/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEwODEyIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.J9o8tNj8rjldSq7OKi1mhPfKxuXnJsCpK-3JR_K-MHU) |
| Paste | .e-rptdesigner-toolbar-paste |  ![image.png](https://support.boldreports.com/kb/attachment/article/13139/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEwODExIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.akIykGIOdbQLe0Sy2c6tI0DC4iXWSGTJ7jnM5NbbecA) |
| Delete | .e-rptdesigner-toolbar-delete |  ![image.png](https://support.boldreports.com/kb/attachment/article/13139/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEwODA3Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.c7BBSrA2w9y2wK0SzzPhkuR4oU99BnS7mW5EuOXS28I)| 
| Undo/Redo | .e-rptdesigner-toolbar-undo <br> .e-rptdesigner-toolbar-undo |  ![image.png](https://support.boldreports.com/kb/attachment/article/13139/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEwODA2Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.M9b7KO1qrJd-sxFatO-v4Ak1gChzTw8RUTvnOSiXkzU)
| Zoom In/Zoom Out| .e-rptdesigner-toolbar-zoomin <br> .e-rptdesigner-toolbar-zoomout |  ![image.png](https://support.boldreports.com/kb/attachment/article/13139/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEwODA1Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.n3j72gDzUhxZtegp_2oyYY_MK2IGmgH53h1QCzUa0kY)| |
| Order | .e-rptdesigner-toolbar-sendbackward <br> .e-rptdesigner-toolbar-sendforward <br> .e-rptdesigner-toolbar-sendtoback <br> .e-rptdesigner-toolbar-sendtofront |  ![image.png](https://support.boldreports.com/kb/attachment/article/13139/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEwODk5Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.ZCM-pRzVHj78fvV7fSFu6tpxV_Wh6WpMy3tncEB_MXg) |
| Center | .e-rptdesigner-toolbar-horizontal <br> .e-rptdesigner-toolbar-vertical |  ![image.png](https://support.boldreports.com/kb/attachment/article/13139/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEwODIzIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.6ohYE7REoR7lEjx0fBGUOnyhEDEKPRAOvCEngaVpmVc)| |
| Alignment | .e-rptdesigner-toolbar-leftalign <br> .e-rptdesigner-toolbar-center <br> .e-rptdesigner-toolbar-rightalign <br> .e-rptdesigner-toolbar-topalign <br> .e-rptdesigner-toolbar-middle <br> .e-rptdesigner-toolbar-bottomalign|  ![image.png](https://support.boldreports.com/kb/attachment/article/13139/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEwODMxIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.HD91rf_fPjD7GTxE9aeHow4ySchoiJep7wT8RMgW88g) |  
| Distribute | .e-rptdesigner-toolbar-spacinghorizontal <br> .e-rptdesigner-toolbar-spacingvertical |  ![image.png](https://support.boldreports.com/kb/attachment/article/13139/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEwODMzIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.fCv4fMcHgHjmA9sO-r0CBqjZ2YXzUO-LfBCyPWZeb8c) | 
| Sizing | .e-rptdesigner-toolbar-SizeToControl <br> .e-rptdesigner-toolbar-SizeToWidth <br> .e-rptdesigner-toolbar-SizeToHeight |  ![image.png](https://support.boldreports.com/kb/attachment/article/13139/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEwODI5Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.fWIWb_007unOgGJtNXcBtRzlZ6rA70qa_FS4PDqct_k) | 
| AlignGrid | .e-rptdesigner-toolbar-aligntogrid <br> .e-rptdesigner-toolbar-sizetogrid |  ![image.png](https://support.boldreports.com/kb/attachment/article/13139/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEwODMwIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.w1b6bPg8M6WGfV-obaIvxzicctdRd4KZaw65IGOShzU) | 
  
You can download a sample application from [here](https://support.boldreports.com/kb/attachment/article/13139/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEwOTM2Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.VnJWIVmNQQfdWTYVQpT_AkW4suT-tG-Z3Hx1oB6-lc0).
</toolbaritem>

# Export the report as a text file in the Bold Reports

In an embedded application, there may be situations where you need to export reports as text files. Although the Bold Reports might not provide a direct option for exporting tables as text files, you can achieve this by leveraging the CSV (Comma-Separated Values) export functionality. CSV export allows you to generate text files.

To set up report options for exporting reports as text files in an embedded application, use the code provided below. In your embedded application, navigate to the **ReportViewerController** file. In this file, locate the **OnInitReportOptions** method.

**Code snippet:**

```
public void OnInitReportOptions(ReportViewerOptions reportOption)
        {
            .....
            reportOption.ReportModel.CsvOptions = new BoldReports.Writer.CsvOptions()
            {
                Encoding = System.Text.Encoding.Default,
                FileExtension = ".txt"
            };
            
        }
```


By utilizing the CSV export features in the viewer, you can successfully export the report as a text file as shown in the below snapshot.

![image.png](https://support.boldreports.com/kb/attachment/article/13140/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg3MTQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.-32zASU2GAdGzgc0DB-Ze0qkCMzyH-5frwMKrj53x2Q)

Click [here](https://support.boldreports.com/kb/attachment/article/13140/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg4NzQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.5ZwF0Gt-TIaAOiVb0U6iM1RxP6su04cfca_bL5OEeYk) to download the sample application.

# Customize the Start Day of the Week in DatePicker


Bold Reports provides a comprehensive resource on customizing the starting day of the week in your calendar using the **WeekStartDay** feature in **DatePicker**. By leveraging these customizable properties, you can easily adjust your calendar to begin on your desired day, resulting in enhanced productivity and a more efficient planning process.

Initially, the calendar will display Sunday as the starting day of the week, as shown in the image below.
    ![image.png](https://support.boldreports.com/kb/attachment/article/13142/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg3MjMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.QzuXYMRX7PqTldVNCTyUQFpgf0uCrMepYuc8Ez3MkN4)

To modify this setting, follow these steps:

1. In the report, click the grey area and select **Set Attributes** from the custom attributes options in the basic settings section.

    ![image.png](https://support.boldreports.com/kb/attachment/article/13142/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijk4ODMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.kVRSMCTG329dq6ioGnDdTUub34yhbetgEqgL7Ur0K0o)

2. Use the custom property **WeekStartDay** and set its value to 1, as demonstrated in the image below.

    ![image.png](https://support.boldreports.com/kb/attachment/article/13142/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijk4ODUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.5OzvYyCyOALUWLkTGqbMtm4W9upgX4YXC9mxgEYAJ0M)
Refer to the table below for the corresponding numbers to designate the starting day of the calendar.


    | WeekStartDay | Day |          
    | ------ | ------ |
    | 1 | Monday |
    | 2 | Tuesday |
    | 3 | Wednesday |
    | 4 | Thursday |
    | 5 | Friday|
    | 6 | Saturday|
    | 7 | Sunday |

3. Click on **Preview** to observe the output, which will reflect the beginning of the week on Monday.
    ![image.png](https://support.boldreports.com/kb/attachment/article/13142/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijk4ODYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.gJJy9MO4BiN3tu_1bJzAoayJ6djxo_WTG9ubrO9M3Ts)


 
 :::Info
Bold Reports provides support for this feature starting from version 4.2.86.
 :::
    

   





# How to Apply Alternating Row Colors in a Matrix Grouping?

Applying alternating row colors in a Matrix is a valuable technique that enhances the readability and visual appeal of reports. By assigning different background colors to consecutive rows, you can create a visual pattern that makes it easier for users to distinguish between rows. Follow this step-by-step guide to apply alternating row colors in a matrix grouping:

1. Start by creating a report and adding a matrix control. Configure the matrix by specifying the dataset and adding the necessary columns and rows.
![image.png](https://support.boldreports.com/kb/attachment/article/13147/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg3MzgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.vydwp8eFwsSk3etW7GysHnaYWShqty2SgY7-7jfQvcc)

2. Next, introduce a [variable](https://help.boldreports.com/enterprise-reporting/designer-guide/report-designer/compose-report/report-variables/) in the report item, which will control the background color changes.
![image.png](https://support.boldreports.com/kb/attachment/article/13147/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg3MzkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.AfYWSxlvykF0s2pBkDpwxsmeCKSr7dqBWpoCjHoq6IU)

3. In the Variable properties, provide the variable name and set the initial value to ensure it functions correctly.
![image.png](https://support.boldreports.com/kb/attachment/article/13147/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg3NDAiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.SL1tMyDwO5IlV1uKx8LmHB0wJU43D8w2h04yJeeHNTQ)

4. Select the Grouping cell in the matrix where you want to apply alternating row colors,and add the visibility expression.
![image.png](https://support.boldreports.com/kb/attachment/article/13147/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjkwOTMiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.hC43G5vYBfFF4mpbBqmkhz7ep2J2IeFM39Rkbk7Tuwg)

5. Insert the following expression for the visibility of the grouping cell:
![image.png](https://support.boldreports.com/kb/attachment/article/13147/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjkwOTQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.uHUItsWIOLzKFw1rvw1UB8f3IjOGqjeQvMtL73GTlT4)

   ```Vb
   =!IIF(RunningValue(Fields!SubCat.Value, CountDistinct, "ProductCategory") Mod 2 = 1, Variables!RowId.SetValue(1), Variables!RowId.SetValue(0))
   ```
   :::Info
    **RunningValue(Fields!SubCat.Value, CountDistinct, "ProductCategory")**: This expression retrieves the current row value for the group.
    **Variables!RowId.SetValue(1)**: This expression sets the value of the variable to 1.
    **Variables!RowId.SetValue(0)**: This expression sets the value of the variable to 0.
   :::

6.  Select the cell within the matrix where you want to alternate the row color.
![image.png](https://support.boldreports.com/kb/attachment/article/13147/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjkwOTUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.j18yZoJ-FpxaZrDelCQk2kzsU1b2_JOmF4i8aI5nXfo)


7. Include the following expression in the background color property:
![image.png](https://support.boldreports.com/kb/attachment/article/13147/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjkwOTYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.QdIhpg6KSVmAmfIUMFPUxEHwzTksPwr5HcfI8GCRMlQ)

 
     ```vb
    =IIf(Variables!RowId.Value = 1, "White", "Green")
     ```

8. Repeat the process for other cells where you want to apply alternating row colors.
![image.png](https://support.boldreports.com/kb/attachment/article/13147/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjkwOTciLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.tNJlwZVPsOkkEf1qdzCRT2r2Sth0d3KN76fl8uUK6eQ)

9. Save the changes and run the report.
![image.png](https://support.boldreports.com/kb/attachment/article/13147/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjkzMTkiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.hUJNVT-M4o_Yx6gnRjjcs2ppTuniGYALSeGH3EtEyD0)

By following these steps, you can successfully apply alternating row colors in a matrix grouping to improve the readability of your report.

   :::Info
   You can download the sample report from [here](https://support.boldreports.com/kb/attachment/article/13147/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjkwOTgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.CKGtyOefyedj-shU4MvV6tq2xQ4GY9x_wN84K62wemk).
   :::


# How to Modify the Properties for Multiple Items in the Designer?

Efficiently modifying [common properties](https://help.boldreports.com/enterprise-reporting/designer-guide/report-designer/compose-report/common-properties/#common-properties) for multiple items on Bold Reports Designer saves time and ensures consistency across your reports. This guide outlines the process of simultaneously changing properties such as borders and background colors for all selected items.

1. Press `Ctrl+A` to select all items on the designer's surface, ensuring that any changes made will be uniformly applied to all the selected items at once.

    ![image.png](https://support.boldreports.com/kb/attachment/article/13149/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjIwOTM5Iiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.SvV5O-qKNw1SkHtyWOp6NfYcONfHH_WDxr8j3AHkrWE)

2. Go to the `Common Properties` section and locate the option to change the background color.

   ![image.png](https://support.boldreports.com/kb/attachment/article/13149/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjIwOTQwIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.yQCvV1kCw_1N9HZOAt_K0Xb2Yw4k2jITTD3ZnpAtZVk)

3. Choose a specific color code or name to set the desired font color for the selected items.

   ![image.png](https://support.boldreports.com/kb/attachment/article/13149/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjIwOTQxIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.Stu6qMmHZI0e3mMIqktezDLZqBGaO__BUN-IBi4w0zA)

4. Proceed to preview the report to visualize and confirm the applied changes.

   ![image.png](https://support.boldreports.com/kb/attachment/article/13149/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjIwOTQyIiwib3JnaWQiOiIzIiwiaXNzIjoic3VwcG9ydC5ib2xkcmVwb3J0cy5jb20ifQ.BClrjFhwvqgl6czxDMGSfYNAcuItbFSgh-zzyxZ6Hvo)


# How to Display Serial Numbers in Matrix Grouping

It allows users to categorize and track data efficiently, making it particularly useful in inventory management, sales analysis, and production tracking. By assigning unique identifiers to each row within specific groups, SSRS enables better organization, improves data readability, and aids in making informed decisions based on the structured information. Whether it's managing projects, tracking student performance, or analyzing survey data, incorporating serial numbers in matrix grouping provides a clearer picture of the data's order and enhances reporting capabilities. To maintain order and facilitate reference within a matrix grouping, it's often necessary to display serial numbers or sequential identifiers. Follow these step-by-step instructions to display serial numbers in matrix grouping:

1. Create your matrix with the necessary data and groupings based on your requirements.
![image.png](https://support.boldreports.com/kb/attachment/article/13151/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjkzMTQiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.unch_C4RQT2dSQ5KLMW-eVFCSdhrjLumMl5sj6CRDqE)

2. Select the text box where you want to display the serial numbers.
![image.png](https://support.boldreports.com/kb/attachment/article/13151/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjkzMTUiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.6BMdY5RmtAzUwddm0PHl2_uNbFQb4Hv3X_5ZJB9jPj4)

3. Within the selected text box, enter the following expression. This expression will generate the serial numbers based on the **SubCat** field and count distinct values within the **ProductCategory** group.
![image.png](https://support.boldreports.com/kb/attachment/article/13151/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjkzMTYiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.Q_4Mu7sadGIfbybH8w-4sf23DBeG0A6XozXnurnxDgs)

 ```Vb
=RunningValue(Fields!SubCat.Value,CountDistinct,"ProductCategory")

 ```

4. After running the report, you should see the matrix with serial numbers displayed in the specified text box.
![image.png](https://support.boldreports.com/kb/attachment/article/13151/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjkzMTgiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.lc6x5arb_t6FBOhXWsoMS0X8xhXGU24viv8uuMIknjo)

 
 :::Info
You can download the above report from [here](https://support.boldreports.com/kb/attachment/article/13151/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg3OTIiLCJvcmdpZCI6IjMiLCJpc3MiOiJzdXBwb3J0LmJvbGRyZXBvcnRzLmNvbSJ9.RI9QxL-urgztnvnYI4QwGbm573W-ZCbmaMdZ__2F0bs).
 :::

 

[NextPage](https://support.boldreports.com/llms-full.txt/1)
