Your Privacy Matters: We use our own and third-party cookies to improve your experience on our website. By continuing to use the website we understand that you accept their use. Cookie Policy
340
Creating FlatDataSource from DataTable dynamically and use it in PivotGrid
posted

I am trying to use UltraPivotGrid dynamically from DataTables. I need to create FlatDataSources from these DataTables and use them in PivotGrid. The FlatDataSource is created with data after converting DataTable to list. But when I set the FlatDataSource to PivotGrid, it does not work. Here is the code:

using System;
using System.Collections.Generic;
using System.Data;
using System.Windows.Forms;
using Company.ClientLibraries;
using Infragistics.Olap.FlatData;
using System.Reflection;
using Infragistics.Olap;
using System.Collections;

DynamicTypeBuilder typeBuilder = new DynamicTypeBuilder

{
DynamicAssemblyName = "MyAssembly",
DynamicTypeName = "Pane"
};

Type dynamicType = null;


private IList GetListFromTable(DataTable table)

{
IList<DynamicTypePropertyInfo> properties = new List<DynamicTypePropertyInfo>();
foreach (DataColumn column in table.Columns)

{
DynamicTypePropertyInfo propertyInfo = new DynamicTypePropertyInfo

{
PropertyName = column.ColumnName,
PropertyType = column.DataType
};
properties.Add(propertyInfo);
}
dynamicType = typeBuilder.GenerateType(properties);
Type listType = typeof(List<>);
Type genericListType = listType.MakeGenericType(dynamicType);
IList list = (IList)Activator.CreateInstance(genericListType);
foreach (DataRow dataRow in table.Rows)
{
object myDynamicInstance = Activator.CreateInstance(dynamicType);
foreach (DataColumn column in table.Columns)

{
PropertyInfo propertyVal = dynamicType.GetProperty(column.ColumnName);
if (dataRow[column] != DBNull.Value)

{

propertyVal.SetValue(myDynamicInstance, dataRow[column], null);

}

}
list.Add(myDynamicInstance);

}
return list;
}


private void LoadPivot()
{
try
{
IList list = null;


list = GetListFromTable(this.dataTable);

if (list != null)
{

FlatDataSourceInitialSettings settings = new FlatDataSourceInitialSettings();
settings.Rows = "CustomerName";
settings.Columns = "ItemName";
settings.Measures = "Total";
this.ultraPivotGrid1.RowHeaderLayout = Infragistics.Win.UltraWinPivotGrid.RowHeaderLayout.Compact;
FlatDataSource ds = new FlatDataSource(
list, dynamicType, settings);

ds.DisplayName = "Orders by ItemName";


this.ultraPivotGrid1.SetDataSource(ds);

}
}
catch (Exception ex)
{
#if DEBUG
ErrorHelper.ProcessError(ex);
#endif
}
}