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 } }
Hello Alex,
Thank you for contacting Infragistics.
After investigating about the DynamicTypeBuilder class and doing some research, WinForms DynamicTypeBuilder (although it exists in WPF) has been determined to be a product idea.
You can suggest new product ideas for future versions (or vote for existing ones) at our community page for Windows Forms.
Submitting your idea will allow you to communicate directly with our product management team, track the progress of your idea at any time, see how many votes it got, read comments from other developers in the community, and see if someone from the product team has additional questions for you. Remember when submitting your idea to explain the context in which a feature would be used and why it is needed as well as anything that would prevent you from accomplishing this today. You can even add screenshots to build a stronger case. Remember that for your suggestion to be successful, you need other members of the community to vote for it. You can also link back to this thread for additional details.
Thanks and have a great day!
I posted here: https://ko.infragistics.com/community/ideas/i/ultimate-ui-for-windows-forms/creating-flatdatasource-from-datatable-dynamically-and-use-it-in-winforms-pivotgrid
Thanks for your reply!
Do you mean that it is not possible to use PivotGrid like this in WinForms? As I said before the FlatDataSource is also filled with data using the list but the pivotGrid is empty! I was wondering if there are some settings I should set?