In this report, we want to write a list of products with some product details (e.g. name, category, price etc.) grouping them by the product category and at the same time, sorting them due to price in ascending order within each of category. Data model used for all examples is exposed here.

Initially, we are creating a report template. Follow the common preparation steps to start building the template from scratch:

  • Open a new blank Word document and enable it for templating
  • Turn on Data Sources and Elements Explorers
  • Define default data source as the Product class

After that, you should be at the following point:
Sorting and grouping image

We should emphasize that we want to build the template binding LD Elements to a list of Product instead of to one single instance of class Product:
Sorting and grouping image

Prepare ordinary Word table in following manner:
Sorting and grouping image

Add LD Group element to the template in a way that the whole Word table with label Category are comprised:
Sorting and grouping image

Define its property Binding Source to default that means IEnumerable<Product> and leave the Path property empty. Then define the key (Group By property) that grouping will be performed by. In our case this is the name of the product category:
Sorting and grouping image

However, Group element reshapes collection of values that it is bound to to collection of groups formed due to chosen key. Each group (both key and values) in this collection represents providing Data Context for LD element's inserted within this Group element.
Thus, within our Group element we can insert a Field element bound to the group key (or some of its inherited property):
Sorting and grouping image
As it is shown above the Path property of this Field element is set to Key, and the Key was previously determinated as key of the grouping i.e. Group element, in our case as a property Category.Name of type of grouping collection's item Product:
Sorting and grouping image

Also, within Group element a List element naturally found its position in order to be bound to a singular group:
Sorting and grouping image
We embraced the whole row within List element. Binding Source property is set to Current Data Context whereas Path property of the List element is left empty. Next, we have to sort each of groups of products (grouped by group key which is name of product category) by product price. This is defined with Order By property:
Sorting and grouping image

Sorting and grouping image

Sorting and grouping image
Now, within List element insert right Field elements bound to product name and price. Field element bound to Product's property Price should be formatted as a currency using Format String property (about formatting values you can read here):
Sorting and grouping image



Also, this collection of groups ("result" of rendering of Group element) could be sorted as well by the grouping key or some of its inherited property.
It is also possible to group collections by more than one grouping key. To achieve this, nested Group elements should be used.


Finally, the templated table (with Design Mode switched on) looks like:
Sorting and grouping image


Next, save the template and generate the report. Report generation takes place programmatically, from your application that is using (has a reference to) the LD ReportEngine dll. This code looks like following:

// Instancing report engine, by assigning the data source
DocumentGenerator dg = new DocumentGenerator(DataAccess.GetProducts());

// Generating report by specifying the report template and the resulting report (as file paths)
DocumentGenerationResult result = dg.GenerateDocument("example6.docx", "example6_output.docx");

// Examining potentially errors
if (result.HasErrors)
{
    foreach (Error error in result.Errors) Console.Out.WriteLine(error.Message);
}


It is also possible to invoke the method GenerateDocument with same parameters typed as System.IO.Stream.


Generated report looks like:
Sorting and grouping image