I am binding the PivorGrid to local data and I am validating that the list contains some records. However, the PivotGrid appears empty. It looks like if the data arrives after PivotGrid initializes, the component does not display it.
Reproduction: https://blazorrepl.telerik.com/GnYDuvFP13H5RQwk31.
===
ADMIN EDIT
===
A possible option to handle the scenario for the time being is to ensure the PivotGrid initializes only when the data is available. For that purpose, you can conditionally render the component based on the data count. Optionally, you can show a LoaderContainer while the data is being fetched.I want to control the visibility of the total and sub-total. I want to be able to hide them if needed.
=====
TELERIK EDIT: It is possible to hide the Grand Total column and all Total rows with CSS. You can also hide only the non-Grand Total rows if you like.
<TelerikPivotGridContainer>
<TelerikPivotGridConfigurator />
<TelerikPivotGridConfiguratorButton />
<TelerikPivotGrid Data="@PivotData"
DataProviderType="@PivotGridDataProviderType.Local"
ColumnHeadersWidth="160px"
Class="no-headers">
<PivotGridColumns>
<PivotGridColumn Name="@nameof(PivotModel.Country)" Title="Country" />
<PivotGridColumn Name="@nameof(PivotModel.City)" Title="City" />
</PivotGridColumns>
<PivotGridRows>
<PivotGridRow Name="@nameof(PivotModel.Category)" Title="Category" />
<PivotGridRow Name="@nameof(PivotModel.Product)" Title="Product" />
</PivotGridRows>
<PivotGridMeasures>
<PivotGridMeasure Name="@nameof(PivotModel.ContractValue)"
Title="Contract Value"
Aggregate="@PivotGridAggregateType.Sum" />
</PivotGridMeasures>
</TelerikPivotGrid>
</TelerikPivotGridContainer>
<style>
/* Hide Grand Total column text. Remove cell paddings and borders. */
.k-pivotgrid-column-headers .k-pivotgrid-row:first-child .k-pivotgrid-header-total:last-child,
.k-pivotgrid-values .k-pivotgrid-header-total:last-child {
color: transparent;
font-size: 0;
padding: 0;
border-width: 0;
}
/* Shrink Grand Total column */
div.k-pivotgrid.no-headers .k-pivotgrid-column-headers col:last-child,
div.k-pivotgrid.no-headers .k-pivotgrid-values col:last-child {
width: 0 !important;
}
/* Hide Total row headers text */
/* Uncomment the not:() selector if you want to show back the Grand Total row. There must be no space before :not() */
div.k-pivotgrid.no-headers .k-pivotgrid-row-headers tr.k-pivotgrid-row:has(.k-pivotgrid-header-total)/*:not(:last-child)*/,
div.k-pivotgrid.no-headers .k-pivotgrid-values tr.k-pivotgrid-row:has(.k-pivotgrid-header-total:first-child)/*:not(:last-child)*/ {
font-size: 0;
color: transparent;
}
/* Remove Total headers cell paddings and borders */
/* Uncomment the not:() selector if you want to show back the Grand Total row. There must be no space before :not() */
div.k-pivotgrid.no-headers .k-pivotgrid-row-headers tr.k-pivotgrid-row:has(.k-pivotgrid-header-total)/*:not(:last-child)*/ th,
div.k-pivotgrid.no-headers .k-pivotgrid-values tr.k-pivotgrid-row:has(.k-pivotgrid-header-total:first-child)/*:not(:last-child)*/ td {
padding: 0;
border-width: 0;
}
</style>
@code {
private List<PivotModel> PivotData { get; set; } = new();
protected override void OnInitialized()
{
var dataItemCount = 100;
var categoryCount = 3;
var productCount = 10 + 1;
var countryCount = 2;
var cityCount = 4 + 1;
var rnd = Random.Shared;
for (int i = 1; i <= dataItemCount; i++)
{
var productNumber = Random.Shared.Next(1, productCount);
var categoryNumber = productNumber % categoryCount + 1;
var cityNumber = rnd.Next(1, cityCount);
var countryNumber = cityNumber % countryCount + 1;
PivotData.Add(new PivotModel()
{
Category = $"Category {categoryNumber}",
Product = $"Product {productNumber}",
Country = $"Country {countryNumber}",
City = $"City {cityNumber}",
ContractDate = DateTime.Now.AddDays(-rnd.Next(1, 31)).AddMonths(-rnd.Next(1, 12)).AddYears(-rnd.Next(0, 5)),
ContractValue = (productNumber == 3 || cityNumber == 2 || categoryNumber == 1) ? 0 : rnd.Next(123, 987)
});
}
base.OnInitialized();
}
public class PivotModel
{
public string Category { get; set; } = string.Empty;
public string Product { get; set; } = string.Empty;
public string Country { get; set; } = string.Empty;
public string City { get; set; } = string.Empty;
public DateTime ContractDate { get; set; }
public decimal ContractValue { get; set; }
}
}
I want to save or restore the state of the PivotGrid Configurator. Potentially, the user may have spent some time setting up their perfect PivotGrid that suited their needs, hence saving state seems critical.
===
ADMIN EDIT
===
The request covers exposing a state feature to programmatically manage various data operations in the PivotGrid - sorting, filtering, reordering of columns, expanding of items.
Hello
Just testing the new PivotGrid and a few features seem missing which may be critical and I cannot see an easy way to customise via templates or the like.
Apologies in advance if I have just missed it in the documentation or my understanding.
In my opinion, the main purpose a developer would put a PivotGrid into a web application;
Critical
Less Critical
Aside from that, all good and works well.
Cheers
Phil
I would be much appreciated feature if we could export a pivot grid to excel in the same way that we can export a grid to excel.
Extra Credit: As an added bonus, if the excel export was actually in an Excel Pivot Table format, that would be awesome.
I'd like to allow the users to resize the columns, so they can see the full cell content.
Column auto-fitting can also be included.