Live Razor Page Samples
Dashboard from 1693 Analytics
This sample shows how to create a dashboard where the user chooses from a list of states, and relevant educational cost data and charts are returned for that state. The model and the data for this sample are contained in a static Excel workbook which has been provided by 1693 Analytics, but it could just as easily come from a workbook which is dynamically generated.
Supporting Files
The following file is utilized by this sample:
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace Website.Pages.Support.Samples.RazorPages.Imaging
{
public partial class Dashboard1693AnalyticsModel : PageModel
{
public List<string> States { get; set; } = [];
public void OnGet()
{
// Open the workbook
SpreadsheetGear.IWorkbook workbook = SpreadsheetGear.Factory.GetWorkbook("files/1693analytics.xls");
// Dynamically build the state list using a defined name.
SpreadsheetGear.IRange stateRange = workbook.Names["ListOfStates"].RefersToRange;
foreach (SpreadsheetGear.IRange cell in stateRange)
States.Add(cell.Text);
}
}
}
@page
@model Dashboard1693AnalyticsModel
<div class="row justify-content-center">
<div class="col">
<div class="card mb-2">
<h2 class="card-header">Sample Details</h2>
<div class="card-body">
<div class="row small">
<div class="col-12 order-last order-xl-first">
<div class="alert alert-secondary">
<div class="mb-2">
<label for="states-list" class="form-label">Select a State:</label>
<select id="states-list" class="form-select">
@foreach (var state in Model.States)
{
<option value="@state">@state</option>
}
</select>
</div>
</div>
</div>
<div class="col-12 order-first order-xl-last">
<p>
This sample shows how to create a dashboard where the user chooses from a list of states, and relevant
educational cost data and charts are returned for that state. The model and data for this sample are
contained in a static Excel workbook which has been provided by Burt Baker at
<a href="http://www.1693net.com/">1693 Analytics, LLC</a>, but it could just as easily come from a
workbook which is dynamically generated by SpreadsheetGear.
</p>
<p>The key steps in the generation of this dashboard are:</p>
<ul>
<li>
The source workbook is opened upon first visiting the sample page in the <code>OnGet</code> handler
and a list of states with available data is created, which will populate the <code><select></code>
element on the Razor Page.
</li>
<li>
JavaScript on the Razor Page sets up an event handler to construct a URL to the
<a asp-page="/Support/Samples/RazorPages/View" asp-route-urlSlug="SpreadsheetGearImage" target="_blank">
SpreadsheetGear Image Rendering Utility</a> whenever the <code><select></code> element's selection is
changed.
</li>
<li>The constructed URL is assigned to the <code><img></code> element's <code>src</code> attribute.</li>
<li>
The browser generates an HTTP request to the image rendering utility which generates the
dashboard.
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="col-auto">
<div class="card">
<div class="card-body">
<div class="card-text">
<div class="alert alert-info">
<h5>
Image Generated by
<a asp-page="/Support/Samples/RazorPages/View" asp-route-urlSlug="SpreadsheetGearImage" target="_blank">
SpreadsheetGear Image Rendering Utility
</a>
</h5>
<hr />
<div class="fw-bold">URL of <span class="font-monospace"><img src="…"></span></div>
<div class="small font-monospace" style="font-size: 9pt;"><a id="image-url-link" href="#" target="_blank"></a></div>
</div>
<img id="dashboard-img" />
</div>
</div>
</div>
</div>
</div>
@section Scripts
{
<script>
$(function () {
// Handle value changes to the select list
$("#states-list").change(function () {
// The name of the page containing the SpreadsheetGear Image Rendering Utility.
let imageRenderingUtility = "SpreadsheetGearImage";
// The name of the workbook that contains the 1693 Analytics dashboard.
let file = "?FileName=1693analytics.xlsx";
// The name of the worksheet that will be rendered.
let worksheet = "&WorksheetName=Template";
// The range that will be rendered by the image rendering utility which has been given a user defined
// name of "Dashboard".
let range = "&RangeFormula=Dashboard";
// The currently selected State from the select listbox will be placed in the cell, which has been given
// a user defined name of "CurrentState", by the SpreadsheetGear Image Rendering Utility.
let value = "&CurrentState=" + $(this).val();
// Construct the final URL string.
let url = imageRenderingUtility + file + worksheet + range + value;
// Set "src" attribute of the img element.
$("#dashboard-img").attr("src", url);
// Update link displayed on the sample page to reflect the new URL.
$("#image-url-link").attr("href", url).html(url);
}).change(); // Trigger an initial change to the select list
});
</script>
}