public void SetDataTable(DataTable dt) { Firefly.Box.Context.Current.InvokeUICommand(() => { var ds = new DataSet(); ds.Tables.Add(dt); var l = new List <DevExpress.XtraPivotGrid.PivotGridField>(); Dictionary <PivotGridField, DataColumn> map = new Dictionary <PivotGridField, DataColumn>(); foreach (DataColumn column in dt.Columns) { var fielda = new DevExpress.XtraPivotGrid.PivotGridField(); map.Add(fielda, column); l.Add(fielda); if (_task._sorters.ContainsKey(column.ColumnName)) { fielda.SortMode = PivotSortMode.Custom; var n = column.ColumnName; var f = _task._sorters[n]; pivotGridControl1.CustomFieldSort += (sender, args) => { if (args.Field.Name == "XX_" + n) { args.Result = f(args.Value1, args.Value2); args.Handled = true; } }; } fielda.AreaIndex = 0; fielda.Caption = column.Caption; fielda.Name = "XX_" + column.ColumnName; fielda.FieldName = column.ColumnName; if (column == _task.ColumnColumn) { fielda.Area = DevExpress.XtraPivotGrid.PivotArea.ColumnArea; } else if (column == _task.RowColumn) { fielda.Area = DevExpress.XtraPivotGrid.PivotArea.RowArea; } else if (column == _task.DataColumn) { fielda.Area = DevExpress.XtraPivotGrid.PivotArea.DataArea; } if (column.DataType == typeof(decimal) && !_countColumns.Contains(column)) { fielda.SummaryType = DevExpress.Data.PivotGrid.PivotSummaryType.Sum; } else { fielda.SummaryType = DevExpress.Data.PivotGrid.PivotSummaryType.Count; } // fielda.Name = column.ColumnName; } l.Reverse(); pivotGridControl1.Fields.AddRange(l.ToArray()); this.dataTable1BindingSource.DataMember = "dt"; this.dataTable1BindingSource.DataSource = ds; chartControl1.DataSource = pivotGridControl1; chartControl1.SeriesDataMember = "Series"; chartControl1.SeriesTemplate.ArgumentDataMember = "Arguments"; chartControl1.SeriesTemplate.ValueDataMembers.AddRange(new string[] { "Values" }); pivotGridControl1.CellDoubleClick += (sender, args) => { RunInLogicContext(() => { _task.CellSelected( y => { foreach (var f in args.GetRowFields()) { y(map[f], new[] { args.GetFieldValue(f) }); } foreach (var f in args.GetColumnFields()) { y(map[f], new[] { args.GetFieldValue(f) }); } foreach (PivotGridField f in pivotGridControl1.Fields) { if (f.FilterValues.HasFilter) { y(map[f], f.FilterValues.ValuesIncluded); } } }); }); }; if (File.Exists(SavedLayoutFile)) { pivotGridControl1.RestoreLayoutFromXml(SavedLayoutFile); foreach (PivotGridField f in pivotGridControl1.Fields) { if (_task._sorters.ContainsKey(f.Name.Substring(3))) { f.SortMode = PivotSortMode.Custom; } } } }); }