private PivotSortOrder?GetSummarySortOrder(PivotFieldValueItem valueItem) { if (!valueItem.IsLastFieldLevel) { return(null); } List <PivotGridFieldPair> pairs = valueItem.SortedBySummaryFields; if (pairs == null) { return(null); } PivotSortOrder?sortOrder = null; foreach (PivotGridFieldPair pair in pairs) { if (pair.DataFieldItem != valueItem.DataField) { continue; } if (sortOrder != null) { if (sortOrder.Value != pair.FieldItem.SortOrder) { sortOrder = null; break; } } sortOrder = pair.FieldItem.SortOrder; } return(sortOrder); }
private void pivotGridControl1_CustomDrawFieldValue(object sender, PivotCustomDrawFieldValueEventArgs e) { PivotFieldValueItem valueItem = GetItem(e); PivotSortOrder? sortOrder = GetSummarySortOrder(valueItem); if (sortOrder == null) { return; // proceed to standard drawing } PivotGridViewInfoData data = ((IPivotGridViewInfoDataOwner)pivotGridControl1).DataViewInfo; e.Info.InnerElements.Clear(); data.ActiveLookAndFeel.Painter.Header.DrawObject(e.Info); SortedShapeObjectInfoArgs sortInfo = new SortedShapeObjectInfoArgs(); sortInfo.Ascending = sortOrder == PivotSortOrder.Ascending; sortInfo.Graphics = e.Graphics; Rectangle sortBounds = data.ActiveLookAndFeel.Painter.SortedShape.CalcObjectMinBounds(sortInfo); sortBounds.X = e.Info.CaptionRect.Right + 2; sortBounds.Y = e.Info.CaptionRect.Y + (int)Math.Round((double)(e.Info.CaptionRect.Height - sortBounds.Height) / 2); sortInfo.Bounds = sortBounds; data.ActiveLookAndFeel.Painter.SortedShape.DrawObject(sortInfo); e.Handled = true; }
private int GetFieldIndex(PivotFieldValueItem valueItem) { if (valueItem == null || valueItem.Field == null) { return(-1); // Grand Total Cell } if (valueItem.IsDataFieldItem) { return(GetFieldIndex(valueItem.Parent)); //Find the parent field of a Data Field cell } return(valueItem.Field.Index); }
public void InstantiateIn(Control container) { PivotGridFieldValueTemplateContainer c = (PivotGridFieldValueTemplateContainer)container; PivotGridFieldValueHtmlCell cell = c.CreateFieldValue(); PivotFieldValueItem valueItem = c.ValueItem; PivotDrillDownDataSource ds = valueItem.CreateDrillDownDataSource(); int id = Convert.ToInt32(ds[0]["ProductID"]); cell.Controls.AddAt(cell.Controls.IndexOf(cell.TextControl), new MyLink(c.Text, id)); cell.Controls.Remove(cell.TextControl); c.Controls.Add(cell); }
private bool HaveSingleChild(PivotGridData data, PivotFieldValueItem valueItem) { if (valueItem.MinLastLevelIndex == valueItem.MaxLastLevelIndex) { return(true); } else { var nestedField = data.GetFieldByArea(valueItem.Area, valueItem.Field.AreaIndex + 1); IEnumerable <DevExpress.XtraPivotGrid.PivotDrillDownDataRow> rows = valueItem.CreateDrillDownDataSource().Cast <DevExpress.XtraPivotGrid.PivotDrillDownDataRow>(); return(rows.Select(row => row[nestedField]).Distinct().Count() == 1); } }
public void InstantiateIn(Control container) { PivotGridFieldValueTemplateContainer c = (PivotGridFieldValueTemplateContainer)container; PivotGridFieldValueHtmlCell cell = c.CreateFieldValue(); PivotFieldValueItem valueItem = c.ValueItem; PivotFieldValueEventArgs helperArgs = new PivotFieldValueEventArgs(valueItem); PivotGridField[] fields = helperArgs.GetHigherLevelFields(); List <object> fieldValues = new List <object>(); foreach (PivotGridField field in fields) { object currentValue = helperArgs.GetHigherLevelFieldValue(field); if (currentValue != null) { fieldValues.Add(currentValue); } } cell.Controls.AddAt(cell.Controls.IndexOf(cell.TextControl), new MyLink(c.Text, fieldValues)); cell.Controls.Remove(cell.TextControl); c.Controls.Add(cell); }
private bool GetParentItem(PivotGridData data, int rowIndex, int level, out PivotFieldValueItem parentValueItem) { parentValueItem = null; if (level < 1) { return(false); } PivotFieldValueItem valueItem = data.VisualItems.GetItem(false, rowIndex, level - 1); if (valueItem != null && valueItem.Field != null && HaveSingleChild(data, valueItem)) { parentValueItem = valueItem; if (level > 1 && GetParentItem(data, rowIndex, level - 1, out valueItem)) { parentValueItem = valueItem; } return(true); } else { return(false); } }