To reproduce: DataTable dt = new DataTable(); public Form1() { InitializeComponent(); for (int i = 0; i < 5; i++) { dt.Columns.Add("Col" + i); } for (int i = 0; i < 5; i++) { DataRow row = dt.NewRow(); dt.Rows.Add(row); foreach (DataColumn col in dt.Columns) { row[col.ColumnName] = randomWord(2, 14); } } } static Random r = new Random(); static string chars = "AEIOUBCDFGHJKLMNPQRSTVWXYZ"; static string randomWord(int minlen, int maxlen) { double d1 = minlen + r.NextDouble() * (maxlen - minlen); int len = (int)d1; char[] word = new char[len]; for (int i = 0; i < len; ++i) { int index = ((int)Math.Round(25 * r.NextDouble() + 0.4999999999)); word[i] = chars[index]; } return new string(word); } public class Item { public int Id { get; set; } public string Name { get; set; } public Item(int id, string name) { this.Id = id; this.Name = name; } } private void radButton1_Click(object sender, EventArgs e) { this.radGridView1.Columns.Clear(); foreach (DataColumn col in dt.Columns) { this.radGridView1.Columns.Add(col.ColumnName); this.radGridView1.Columns.Last().FieldName = col.ColumnName; } this.radGridView1.BestFitColumns(BestFitColumnMode.AllCells); } private void Form1_Load(object sender, EventArgs e) { this.radGridView1.AutoGenerateColumns = false; this.radGridView1.DataSource = dt; foreach (DataColumn col in dt.Columns) { this.radGridView1.Columns.Add(col.ColumnName); this.radGridView1.Columns.Last().FieldName = col.ColumnName; } this.radGridView1.BestFitColumns(BestFitColumnMode.AllCells); } Workaround: clear the GroupDescriptors collection as well and add the GroupDescriptor programmatically: http://docs.telerik.com/devtools/winforms/gridview/grouping/setting-groups-programmatically