Summaries in columns
The grid has broad capabilities of displaying any information not just in rows and cells but also directly in columns. It can be useful for displaying most important information such as total or average values. Docked rows can be scrolled just as regular rows. Child headers can also be scrolled but they remain in visible area of the grid displaying important information.

The main idea is to use customized data painting in grid columns. This feature uses PaintColumnCaption event that first performs default painting and then paints the required data.
grid.PaintColumnCaption += delegate(object sender, PaintColumnCaptionEventArgs e) { if (e.Column.Header.Level > 0) { //Do default drawing e.PaintAll(); e.Handled = true; //Custom drawing area Rectangle rc = e.VirtualBounds; rc.Y += rc.Height / 2; rc.Height /= 2; //Get a row below the header Row row = grid.HitTests.RowTest(new Point(e.VisibleBounds.X, e.VisibleBounds.Bottom)); //Get its parent Row parentRow = row != null ? row.Parent : null; //Compute summary if (parentRow != null) { int sum1 = 0; foreach (Row child in parentRow.Children) { //Don't count the sum row. if (Equals(RowDockStyle.None, child.Dock)) { sum1 += (int)child[e.Column.Id].Value; } } using (StringFormat sf = new StringFormat()) { sf.Alignment = StringAlignment.Center; sf.FormatFlags = StringFormatFlags.NoWrap; e.Graphics.DrawString(string.Format("Sum = {0}", sum1), _summaryFont, Brushes.DarkGreen, rc, sf); } } } }