New to Telerik UI for WinForms? Start a free 30-day trial
How to Add a Button to Header Cells in RadGridView
Updated over 6 months ago
Environment
| Product Version | Product | Author |
|---|---|---|
| 2019.3.1022 | RadGridView for WinForms | Desislava Yordanova |
Description
This tutorial demonstrates how to add a button element in the header cell for a certain column.

Solution
In order to add a button in the header cell, it is suitable to create a custom column which uses a custom GridHeaderCellElement. A tutorial for creating custom cells is available in the following help article: Creating custom cells
C#
public RadForm1()
{
InitializeComponent();
MyGridViewDecimalColumn myColumn = new MyGridViewDecimalColumn();
myColumn.FieldName = "ProductID";
myColumn.HeaderText = "My column";
myColumn.MinWidth = 150;
this.radGridView1.Columns.Add(myColumn);
}
public class MyGridViewDecimalColumn : GridViewDecimalColumn
{
public override Type GetCellType(GridViewRowInfo row)
{
if (row is GridViewTableHeaderRowInfo)
{
return typeof(MyGridHeaderCellElement);
}
return base.GetCellType(row);
}
}
public class MyGridHeaderCellElement : GridHeaderCellElement
{
public MyGridHeaderCellElement(GridViewColumn column, GridRowElement row) : base(column, row)
{
}
protected override Type ThemeEffectiveType
{
get
{
return typeof(GridHeaderCellElement);
}
}
RadButtonElement btn = new RadButtonElement();
protected override void CreateChildElements()
{
base.CreateChildElements();
btn.Text = "Click";
btn.Click += btn_Click;
this.Children.Add(btn);
}
private void btn_Click(object sender, EventArgs e)
{
RadMessageBox.Show("Clicked");
}
public override bool IsCompatible(GridViewColumn data, object context)
{
return data is MyGridViewDecimalColumn && context is GridTableHeaderRowElement;
}
protected override SizeF MeasureOverride(SizeF availableSize)
{
SizeF s = base.MeasureOverride(availableSize);
btn.Measure(availableSize);
return s;
}
protected override SizeF ArrangeOverride(SizeF finalSize)
{
SizeF s = base.ArrangeOverride(finalSize);
RectangleF clientRect = GetClientRectangle(finalSize);
btn.Arrange(new RectangleF(clientRect.X + clientRect.Width - btn.DesiredSize.Width - 5,
clientRect.Y + btn.DesiredSize.Height / 3, btn.DesiredSize.Width, btn.DesiredSize.Height));
return s;
}
}