Skip to main content Skip to footer

How to set background color of C1Sizer grid cell

While working with C1Sizer for Winforms, at times users come across the need to set different BackColor for the individual grid-cells. Almost all grid controls have this property exposed. However, C1Sizer doesn't (its not a regular grid with regular cells either) and hence, this gets wee bit difficult. This article lets us implement the same; and this is all we need to do:

  • Subscribe to C1Sizer's Paint event.

  • Using the row and column bands of C1Sizer grid, we fetch their rectangles.

  • Find the rectangle that is their intersection (this is the cell whose BackColor we need to change).

  • Set some BackColor to the rectangle.

Here's the code:

c1Sizer1.Paint += (s1, e1) =>  
{  
 var _sizer = s1 as C1.Win.C1Sizer.C1Sizer;  

 foreach (C1.Win.C1Sizer.Band row in _sizer.Grid.Rows)  
 {  
   //Get Row rectangle  
   Rectangle row_rect = row.Bounds;  
   foreach (C1.Win.C1Sizer.Band col in _sizer.Grid.Columns)  
   {  
       //Get column rectangle  
       Rectangle col_rect = col.Bounds;  
       //Get cellractangle, which is the intersection of row\_rect & col\_rect  
       Rectangle cell\_rect = Rectangle.Intersect(row\_rect, col_rect);  
       //set BackColor  
       e1.Graphics.FillRectangle(new SolidBrush(System.Drawing.Color.FromArgb(rnd.Next(255), rnd.Next(255),  
rnd.Next(255), rnd.Next(255))), cell_rect);  
       //Draw border  
       ControlPaint.DrawBorder(e1.Graphics, cell_rect, Color.Black, ButtonBorderStyle.Solid);  
    }  
 }  
};  

If you wish, you can implement additional cosmetic changes with control's border.

 c1Sizer1.Border.Thickness = new Padding(1);  
 c1Sizer1.Padding = new Padding(0);  
 c1Sizer1.SplitterWidth = 0;  
 c1Sizer1.Border.Color = Color.Black;  

WinForms Sizer Control with Cell Background Colors