New to Telerik UI for WinForms? Download free 30-day trial

Using the LocalSourceDataProvider

LocalDataSourceProvider is one of the data providers that can be used with RadPivotGrid and RadPivotFieldList. It provides data access to local source such as an IList of instances of user defined classes. In fact any collection that implements the IEnumerable interface can be used as a LocalDataSourceProvider.

Defining LocalDataSourceProvider

You can create an object of type LocalDataSourceProvider and assign it to RadPivotGrid. The LocalDataSourceProvider has an ItemSource property and it is mandatory to set it if you want to display any data. The following code snippet demonstrates this:

Set ItemSource

LocalDataSourceProvider dataProvider = new LocalDataSourceProvider();
dataProvider.ItemsSource = dataset.Orders;

Dim dataProvider As New LocalDataSourceProvider()
dataProvider.ItemsSource = dataset.Orders

The ItemSource can be any collection that implements IEnumerable interface or even a DataTable.

Adding Group Descriptions Collections

When initializing the LocalDataSourceProvider it is a good idea to wrap all modifications in BeginInit/EndInit section. This will refresh the data provider only once when the EndInit is called. If you are applying only modifications (more than one) on already initialized LocalDataSourceProvider you need use the DeferRefresh method which will cause delay of the Refresh and this way all changes will be applied simultaneously.

The LocalDataSourceProvider is using four different collections for the data that it holds:

  • RowGroupDescription: The data added to this description will be shown as rows headers in RadPivotGrid and RadPivotFieldList. The properties can be defined as PropertyGroupDescription, DateTimeGroupDescription, DoubleGroupDescription or you can create custom implementation of PropertyGroupDescriptionBase class. Here's how to define the row group descriptions in your application:

Add Row Descriptions

dataProvider.BeginInit();
dataProvider.RowGroupDescriptions.Add(new DateTimeGroupDescription() { PropertyName = "OrderDate", Step = DateTimeStep.Year, GroupComparer = new GroupNameComparer() });
dataProvider.RowGroupDescriptions.Add(new DateTimeGroupDescription() { PropertyName = "OrderDate", Step = DateTimeStep.Quarter, GroupComparer = new GroupNameComparer() });
dataProvider.RowGroupDescriptions.Add(new DateTimeGroupDescription() { PropertyName = "OrderDate", Step = DateTimeStep.Month, GroupComparer = new GroupNameComparer() });
dataProvider.EndInit();

dataProvider.BeginInit()
dataProvider.RowGroupDescriptions.Add(New DateTimeGroupDescription() With { _
 .PropertyName = "OrderDate", _
 .[Step] = DateTimeStep.Year, _
 .GroupComparer = New GroupNameComparer() _
})
dataProvider.RowGroupDescriptions.Add(New DateTimeGroupDescription() With { _
 .PropertyName = "OrderDate", _
 .[Step] = DateTimeStep.Quarter, _
 .GroupComparer = New GroupNameComparer() _
})
dataProvider.RowGroupDescriptions.Add(New DateTimeGroupDescription() With { _
 .PropertyName = "OrderDate", _
 .[Step] = DateTimeStep.Month, _
 .GroupComparer = New GroupNameComparer() _
})
dataProvider.EndInit()

  • ColumnGroupDescription: The data added to this description will be shown as columns headers in RadPivotGrid and RadPivotFieldList. The properties can be defined as PropertyGroupDescription, DateTimeGroupDescription, DoubleGroupDescription or you can create custom implementation of PropertyGroupDescriptionBase class.Here's how to define the column group descriptions in your application:

Add Columns Descriptions

dataProvider.ColumnGroupDescriptions.Add(new PropertyGroupDescription() { PropertyName = "EmployeeID", GroupComparer = new GrandTotalComparer() });

dataProvider.ColumnGroupDescriptions.Add(New PropertyGroupDescription() With { _
 .PropertyName = "EmployeeID", _
 .GroupComparer = New GrandTotalComparer() _
})

  • AggregateDescriptions: The data added to this description will be aggregated and included in RadPivotGrid as cells. The properties can be defined as PropertyAggregateDescription or you can create custom implementation of PropertyAggregateDescriptionBase class.

The PropertyAggregateDescriptionBase defines an IgnoreNullValues property determining whether the aggregate function will ignore null values when calculating the result. The default value of the property is false.

Here's how to define the aggregate descriptions in your application:

Add Aggregate Descriptions

dataProvider.BeginInit();
dataProvider.AggregateDescriptions.Add(new PropertyAggregateDescription() { PropertyName = "Freight", AggregateFunction = AggregateFunctions.Sum });
dataProvider.AggregateDescriptions.Add(new PropertyAggregateDescription() { PropertyName = "Freight", AggregateFunction = AggregateFunctions.Average });
dataProvider.EndInit();

dataProvider.BeginInit()
dataProvider.AggregateDescriptions.Add(New PropertyAggregateDescription() With { _
 .PropertyName = "Freight", _
 .AggregateFunction = AggregateFunctions.Sum _
})
dataProvider.AggregateDescriptions.Add(New PropertyAggregateDescription() With { _
 .PropertyName = "Freight", _
 .AggregateFunction = AggregateFunctions.Average _
})
dataProvider.EndInit()

  • FilterDescriptions: The data added to this description will be filtered and after that included in RadPivotGrid. The properties can be defined as PropertyFilterDescription or you can create custom implementation of PropertyFilterDescriptionBase class.

Add Filter Descriptions

dataProvider.FilterDescriptions.Add(new PropertyFilterDescription() { PropertyName = "ShipCountry", CustomName = "Country" });

dataProvider.FilterDescriptions.Add(New PropertyFilterDescription() With { _
 .PropertyName = "ShipCountry", _
 .CustomName = "Country" _
})

Adding Property Descriptors

All property description classes are inheriting the abstract class DescriptionBase. That's why all of them have the following properties:

  • PropertyName: This is the most important property. It must be set to the property of the data that will be represented with this property description.

  • CustomName: Sets the name that will be shown instead of the property name in RadPivotGrid and RadPivotFieldList.

Here is a list of the property descriptions that you can use:

  • PropertyGroupDescription: Available for RowGroupDescriptions and ColumnGroupDescriptions.

  • DoubleGroupDescription: Available for RowGroupDescriptions and ColumnGroupDescriptions. Used when the data is of type Double. One of the important properties is Step - it is used to define the size of the generated groups.

  • DateTimeGroupDescription: Available for RowGroupDescriptions and ColumnGroupDescriptions. Used when the data is of type DateTime. Very useful is the Step property where you can set if the grouping should be on day, month or year.

  • PropertyFilterDescription: Available for FilterDescriptions only. The important property here is Condition as the filtering is done based on it. You can use four conditions: ComparisonCondition, IntervalCondition, SetCondition, TextCondition.

  • PropertyAggregateDescription: Available for AggregateDescriptions only. You have to define the AggregateFunction that will be used. You can choose between various predefined functions like Average, Sum, Min, Max etc.

Applying the Data Provider to RadPivotGrid

To apply the already defined data provider, use the following property:

Set Data Provider

this.radPivotGrid1.DataProvider = dataProvider;

Me.RadPivotGrid1.DataProvider = dataProvider

The Culture Property

The groups formed by the DateTimeGroupDescription as well as the number format of the values formed by the DoubleGroupDescription both depend on the current culture. For example, in some cultures weeks start on Saturday but in others they start on Monday which will result in different values when the grouping step is Week. To change the culture of the LocalDataSourceProvider, just set its Culture property.

Provider Culture

dataProvider.Culture = new System.Globalization.CultureInfo("de-DE");

dataProvider.Culture = New System.Globalization.CultureInfo("de-DE")

See Also

In this article