Exemple #1
0
        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;
                        }
                    }
                }
            });
        }