protected override void CreateBricksForRecord(XRDataRecord record, PanelBrick parentBrick, bool isHeader, ref float actualHeight) { XRTreeListNode node = record as XRTreeListNode; PrintNodeEventArgs args = new PrintNodeEventArgs(node); if (!isHeader) { TreeList.OnPrintNode(args); } if (args.SuppressType == NodeSuppressType.Leave) { int nodeLevel = node.Level; TreeListNodeBrick nodeBrick = new TreeListNodeBrick(TreeList, (DataContainerBrick)parentBrick, isHeader); nodeBrick.Style = XRControlStyle.Default.Clone() as XRControlStyle; nodeBrick.Separable = false; RecordPrintCache cache = new TreeListNodePrintCache(nodeBrick, node.Level); List <VisualBrick> childBricks = new List <VisualBrick>(); List <XRFieldHeader> visibleHeaders = TreeList.VisibleHeaders; for (int i = 0; i < visibleHeaders.Count; i++) { VisualBrick valueBrick = CreateCellBrick(TreeList, parentBrick, node, i, isHeader); childBricks.Add(valueBrick); } CorrectBrickBounds(nodeBrick, childBricks, nodeLevel * TreeList.NodeIndent, actualHeight); float nodeHeight = nodeBrick.Rect.Height; VisualBrickHelper.SetBrickBounds(nodeBrick, nodeBrick.Rect, TreeList.Dpi); parentBrick.Bricks.Add(nodeBrick); actualHeight += nodeHeight; if (!IsDesignMode) { if (isHeader) { ((DataContainerBrick)parentBrick).PrintCache.HeaderCache = cache; } else { ((DataContainerBrick)parentBrick).PrintCache.RecordsCache.Add(cache); } } } if (args.SuppressType != NodeSuppressType.SuppressWithChildren) { foreach (XRTreeListNode childNode in node.Nodes) { CreateBricksForRecord(childNode, parentBrick, isHeader, ref actualHeight); } } }
protected override bool AfterPrintOnPage(IList <int> indices, RectangleF brickBounds, RectangleF clipRect, Page page, int pageIndex, int pageCount, Action <Brick, RectangleF> callback) { bool result = base.AfterPrintOnPage(indices, brickBounds, clipRect, page, pageIndex, pageCount, callback); if (!IsHeaderBrick) { TreeListNodePrintCache currentCache = parentBrick.PrintCache.GetCacheByBrick(this) as TreeListNodePrintCache; int cacheIndex = parentBrick.PrintCache.RecordsCache.IndexOf(currentCache); if (cacheIndex > 0) { TreeListNodePrintCache prevCache = parentBrick.PrintCache.RecordsCache[cacheIndex - 1] as TreeListNodePrintCache; if (currentCache.NodeLevel < prevCache.NodeLevel) { ((TreeListNodeBrick)currentCache.Brick).AddCellPosition(XRDataCellPosition.HigherLevel); ((TreeListNodeBrick)prevCache.Brick).AddCellPosition(XRDataCellPosition.LowerLevel); } } } return(result); }