Format pivot table PivotData C# examples


This documentation describes how to customize pivot table produced by PivotTableHtmlWriter (Toolkit component).

Format labels and measure headers

Table labels may be customized by defining FormatKey handler:

var pvtHtmlWr = new PivotTableHtmlWriter(outputWr);
pvtHtmlWr.FormatKey = (key, dim) => {
  // formatting rule based on key type
  if (key is DateTime)
    return String.Format("{0:d}", key);
 
  // formatting rule based on dimension name
  if (dim=="month" && key is int)
	return ResolveMonthName((int)key); 

  return Convert.ToString(key);
};
  Germany Belgium
Product1 15 17
Product2 10 1
Product3 2

For pivot table with multiple values measure headers are displayed and they may be customized with FormatMeasureHeader:

pvtHtmlWr.FormatMeasureHeader = (aggrFactory, measureIndex) => {
  // customize header by factory type or measure index
  return aggrFactory.ToString();
};
  Germany Belgium
Count Sum of Amount Count Sum of Amount
Product1 15 677 17 898
Product2 10 251 1 12
Product3 2 31

Dimension labels may be customized with FormatDimensionLabel handler:

pvtHtmlWr.FormatDimensionLabel = (dim) => {
  // dim is a value from PivotData.Dimensions
  return dim=="product_name" ? "Product" : dim;
};
Product Country Germany Belgium
Product1 15 17
Product2 10 1
Product3 2

Format table values

pvtHtmlWr.FormatValue = (aggr,measureIdx) => {
  if (aggr.Count==0)
	return String.Empty;

  if (measureIdx==1)  // index is zero-based
	return String.Format("${0:0.##}", aggr.Value); 
  
  // apply default number format
  return String.Format("{0:0.##}", aggr.Value); 
};
  Germany Belgium
Count Sum of Amount Count Sum of Amount
Product1 15 $677 17 $898
Product2 10 $251 1 $12
Product3 2 $31

Note: formatting handlers may return HTML content if PivotTableHtmlWriter.AllowHtml property set to true.

Advanced table cells customization

When cells formatting and/or visual styling depends on the context it is possible to derive from PivotTableHtmlWriter class and override OnWriteKeyCell and OnWriteValueCell methods:

public class CustomPvtTblHtmlWriter : PivotTableHtmlWriter {
  public CustomPvtTblHtmlWriter(TextWriter writer) : base(writer) {
    // enable HTML content for this writter by default
    AllowHtml = true;
  }

  protected override void OnWriteKeyCell(PivotTableHtmlWriter.KeyCellContext keyContext) {
    if (keyContext.Dimension=="Product" && keyContext.DimensionKey.Equals("Product1")) {
      // adds css class to TH with key label
      keyContext.AddCssClass("product1");  

	  // redefine TH cell's content
      keyContext.FormattedKey = "<a name='product1'>"+keyContext.FormattedKey+"</a>";
    }
  }

  protected override void OnWriteValueCell(PivotTableHtmlWriter.ValueCellContext valueContext) {
    if (valueContext.RowKey.DimKeys[0].Equals("Product1")) {
      // adds css class to TD with value
      valueContext.AddCssClass("product1");
      
      // add suffix to TD cell's for some values
      if (Convert.ToDecimal(valueContext.Aggregator.Value)<10)
        valueContext.FormattedValue += " (!)";    
    }
  }
}