Pivot data with aggregation and output to HTML
Say your data is a list of animals
| Family | Name | Size | Quantity |
|---|---|---|---|
| Felidae | Cat | Small | 1 |
| Felidae | Lion | Tall | 1 |
| Felidae | Tiger | Tall | 1 |
| Canidae | Dog | Small | 1 |
| Canidae | Wolf | Tall | 1 |
| Canidae | Racoon | Small | 1 |
| Canidae | Fox | Small | 1 |
-
First, represent your data as a
ListofRow'svar animals = new List<Row> { new Row { Fields = new Dictionary<string, object> { { "Name", "Cat" }, { "Family", "Felidae" }, { "Size", "Small" }, { "Quantity", 1 }, } }, new Row { Fields = new Dictionary<string, object> { { "Name", "Lion" }, { "Family", "Felidae" }, { "Size", "Tall" }, { "Quantity", 1 }, } }, new Row { Fields = new Dictionary<string, object> { { "Name", "Tiger" }, { "Family", "Felidae" }, { "Size", "Tall" }, { "Quantity", 1 }, } }, new Row { Fields = new Dictionary<string, object> { { "Name", "Dog" }, { "Family", "Canidae" }, { "Size", "Small" }, { "Quantity", 1 }, } }, new Row { Fields = new Dictionary<string, object> { { "Name", "Wolf" }, { "Family", "Canidae" }, { "Size", "Tall" }, { "Quantity", 1 }, } }, new Row { Fields = new Dictionary<string, object> { { "Name", "Racoon" }, { "Family", "Canidae" }, { "Size", "Small" }, { "Quantity", 1 }, } }, new Row { Fields = new Dictionary<string, object> { { "Name", "Fox" }, { "Family", "Canidae" }, { "Size", "Small" }, { "Quantity", 1 }, } }, }; -
Initialize grid.
In this example we are going to group by "Size"Grid grid = new Grid(originalData: animals, columnDefinitions: new ColumnDefinition[] { new ColumnDefinition { HeaderName = "Family", Field = "Family", CssClass = "", Width = 100 }, new ColumnDefinition { HeaderName = "Name", Field = "Name", CssClass = "", Width = 100 }, new ColumnDefinition { HeaderName = "Size", Field = "Size", CssClass = "", Width = 100 }, new ColumnDefinition { HeaderName = "Qty", Field = "Quantity", CssClass = "align-right", Width = 40 } }, pivotColumns: new string[] { "Size" }, aggregatedColumns: new string[] { "Quantity" }); -
Get html
string html = grid.GetHtml(); -
Output:
| Family | Name | Size | Qty |
|---|---|---|---|
| Small | 4 | ||
| Felidae | Cat | Small | 1 |
| Canidae | Dog | Small | 1 |
| Canidae | Racoon | Small | 1 |
| Canidae | Fox | Small | 1 |
| Tall | 3 | ||
| Felidae | Lion | Tall | 1 |
| Felidae | Tiger | Tall | 1 |
| Canidae | Wolf | Tall | 1 |
With the same source data, this:
pivotColumns: new string[] { "Family", "Size" },
Will output this:
| Family | Name | Size | Qty |
|---|---|---|---|
| Felidae | 3 | ||
| Felidae | Small | 1 | |
| Felidae | Cat | Small | 1 |
| Felidae | Tall | 2 | |
| Felidae | Lion | Tall | 1 |
| Felidae | Tiger | Tall | 1 |
| Canidae | 4 | ||
| Canidae | Small | 3 | |
| Canidae | Dog | Small | 1 |
| Canidae | Racoon | Small | 1 |
| Canidae | Fox | Small | 1 |
| Canidae | Tall | 1 | |
| Canidae | Wolf | Tall | 1 |
- Format numbers
- Format dates
- Allow column grouping in header (eg. Column "Birth": Column "Day" + Column "Month" + Column "Year")
- Allow other types of aggregation: average, min, max
- Sorting