Completed
Last Updated: 24 Nov 2016 06:27 by ADMIN
To reproduce:

Sub New()

    InitializeComponent()

    Dim dt As New DataTable()
    dt.Columns.Add("Price", GetType(System.Double))
    dt.Columns.Add("Name", GetType(System.String))
    dt.Columns.Add("Nr", GetType(System.Double))
    For i As Integer = 0 To 49
        dt.Rows.Add(i, "Data" & i, i)
    Next
    With Me.RadGridView1
        .DataSource = dt
        .Columns("Price").FormatString = "{0:C2}"
        .Columns("Nr").FormatString = "{0:N1}"
        .Columns("Price").ExcelExportType = Export.DisplayFormatType.Currency
        '
        .AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill
    End With
    Me.RadGridView1.Columns("Price").ExcelExportType = Export.DisplayFormatType.Currency

    Me.RadGridView1.Columns("Nr").ExcelExportType = Export.DisplayFormatType.Custom
    Me.RadGridView1.Columns("Nr").ExcelExportFormatString = "{0:N1}"

    Me.RadGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill

End Sub

Private Sub RadButton1_Click(sender As Object, e As EventArgs) Handles RadButton1.Click
    Dim spreadStreamExport As New GridViewSpreadStreamExport(Me.RadGridView1)
    spreadStreamExport.ExportVisualSettings = True
    Dim fileName As String = "..\..\" + DateTime.Now.ToLongTimeString().Replace(":", "_").ToString() + ".xlsx"
  
    spreadStreamExport.RunExport(fileName, New SpreadStreamExportRenderer())
    Process.Start(fileName)
End Sub

Workaround:
Me.RadGridView1.Columns("Nr").ExcelExportType = Export.DisplayFormatType.Fixed

AddHandler spreadStreamExport.CellFormatting, AddressOf CellFormatting
Private Sub CellFormatting(sender As Object, e As SpreadStreamCellFormattingEventArgs)
        If e.ExportCell.ColumnIndex = 2 Then
            e.ExportCell.ExportFormat = "0.0"
        End If
    End Sub
Completed
Last Updated: 07 Nov 2016 11:49 by ADMIN
Workaround: custom CompositeFilterForm 
private void radGridView1_CreateCompositeFilterDialog(object sender, GridViewCreateCompositeFilterDialogEventArgs e)
{
    e.Dialog = new MyCompositeFilterForm();
}

public class MyCompositeFilterForm : CompositeFilterForm
{
    public override void Initialize(GridViewDataColumn dataColumn, Telerik.WinControls.Data.FilterDescriptor filterDescriptor, bool useTypedEditors)
    {
        base.Initialize(dataColumn, filterDescriptor, useTypedEditors);

        if (dataColumn.Name == "Time")
        {
            RadDateTimePicker rEditor = (RadDateTimePicker)this.RightEditor;
            rEditor.DateTimePickerElement.ShowTimePicker = true;
            rEditor.DateTimePickerElement.CalendarSize = new Size(500, 250);

            RadDateTimePicker lEditor = (RadDateTimePicker)this.LeftEditor;
            lEditor.DateTimePickerElement.ShowTimePicker = true;
            lEditor.DateTimePickerElement.CalendarSize = new Size(500, 250);
        }
    }

protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
    base.OnClosing(e);

    if (this.DialogResult == DialogResult.OK)
    {
        object leftValue = this.GetValueFromDateEditor(this.LeftEditor);
        if (leftValue != null)
        {
            this.LeftDescriptor.Value = leftValue;
        }

        object rightValue = this.GetValueFromDateEditor(this.RightEditor);
        if (rightValue != null)
        {
            this.RightDescriptor.Value = rightValue;
        }
    }
}


    protected virtual object GetValueFromDateEditor(RadControl editorControl)
    {
        object value = null;
        if (editorControl is RadDateTimePicker)
        {
            value = ((RadDateTimePicker)editorControl).Value;
            return value;
        }

        return value;
    }
}

Completed
Last Updated: 24 Nov 2016 12:32 by ADMIN
To reproduce:

public RadForm1()
{
    InitializeComponent();

    DataTable dt = new DataTable();
    dt.Columns.Add("Id");
    dt.Columns.Add("Name");
    for (int i = 0; i < 50; i++)
    {
        dt.Rows.Add(i, "Data" + i);
    }

    this.radGridView1.DataSource = dt;
    this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;

    this.radGridView1.AutoSizeRows = false;
}

private void RadForm1_Load(object sender, EventArgs e)
{
    this.radGridView1.Rows[5].MinHeight = 80;
    this.radGridView1.Rows[5].MaxHeight = 100;
}

The Min/MaxHeight is not respected even when resizing the row.

Workaround: set the Height property.
Completed
Last Updated: 28 Nov 2016 07:03 by ADMIN
Please refer to the attached sample project which result is illustrated in the provided screenshot.

Workaround:
this.radGridView1.ClearSelection();
this.radGridView1.CurrentRow = null; 
this.radGridView1.Rows[1].Cells[2].IsSelected = true;
Completed
Last Updated: 24 Nov 2016 11:34 by ADMIN
Use attached project to reproduce. The video shows what steps you need to take. 

Workaround:
Use CellEndEdit instead. 
Completed
Last Updated: 24 Nov 2016 11:33 by ADMIN
Use the attached project to reproduce. The video shows what steps you need to take. 

Completed
Last Updated: 09 Nov 2016 13:51 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 0
Category: GridView
Type: Bug Report
1
To reproduce:

Sub New()

    InitializeComponent()

    Dim dt As New DataTable
    dt.Columns.Add("Id", GetType(Integer))
    dt.Columns.Add("Name", GetType(String))

    For index = 1 To 200000
        dt.Rows.Add(index, "Item" & index)
    Next
    Me.RadGridView1.DataSource = dt

    Me.RadGridView1.MultiSelect = True
    Me.RadGridView1.SelectionMode = Telerik.WinControls.UI.GridViewSelectionMode.CellSelect
End Sub

Private Sub RadButton1_Click(sender As Object, e As EventArgs) Handles RadButton1.Click
    Dim sw As New Stopwatch
    sw.Start()

    Dim mi As MethodInfo = GetType(GridViewSelectedCellsCollection).GetMethod("BeginUpdate", BindingFlags.Instance Or BindingFlags.NonPublic)
    mi.Invoke(Me.RadGridView1.MasterTemplate.SelectedCells, Nothing)
    For Each row As GridViewDataRowInfo In Me.RadGridView1.Rows
        row.Cells("Name").IsSelected = True
    Next
    
    Dim mi2 As MethodInfo = GetType(GridViewSelectedCellsCollection).GetMethod("EndUpdate", BindingFlags.Instance Or BindingFlags.NonPublic)
    mi2.Invoke(Me.RadGridView1.MasterTemplate.SelectedCells, New Object() {True})

    sw.Stop()
    RadMessageBox.Show(sw.ElapsedMilliseconds)
End Sub
Completed
Last Updated: 18 Oct 2016 10:19 by ADMIN
To reproduce:
DataTable table;
public RadForm1()
{
    InitializeComponent();
    table = GetTable();
    radGridView1.DataSource = table;

}

private void radButton1_Click(object sender, EventArgs e)
{
    var changes = table.GetChanges();

    if (changes == null)
    {
        Console.WriteLine("No Changes");
    }
    else
    {
        Console.WriteLine("Saved");

        foreach (DataRow item in changes.Rows) 
        {
            Console.WriteLine(item.RowState.ToString());
        }
    }

    table.AcceptChanges();
}
static DataTable GetTable()
{

    DataTable table = new DataTable();
    table.Columns.Add("Dosage", typeof(int));
    table.Columns.Add("Drug", typeof(string));
    table.Columns.Add("Name", typeof(string));
    table.Columns.Add("Date", typeof(DateTime));


    table.Rows.Add(25, "Indocin", "David", DateTime.Now);
    table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
    table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
    table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
    table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);
    table.AcceptChanges();

    return table;
}

Workaround:
(this.radGridView1.CurrentRow.DataBoundItem as IEditableObject).EndEdit();
Completed
Last Updated: 05 Oct 2016 14:00 by ADMIN
Workaround: 

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            this.radGridView1.DataSource = this.GetData();
            this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;

            ((GridViewDateTimeColumn)this.radGridView1.Columns["Date"]).FormatString = "{0: yyyy-MM-dd hh:mm:ss.fff tt}";
        }

        private DataTable GetData()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Id", typeof(int));
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("Date", typeof(DateTime));
            dt.Columns.Add("Bool", typeof(bool));
            for (int i = 0; i < 100; i++)
            {
                dt.Rows.Add(i, "Name " + i, DateTime.Now.AddDays(i), i % 2 == 0);
            }

            return dt;
        }
    }

 public class MyRadGridView : RadGridView
    {
        public override string ThemeClassName
        {
            get
            {
                return typeof(RadGridView).FullName;
            }
        }

        protected override RadGridViewElement CreateGridViewElement()
        {
            return new MyRadGridViewElement();
        }
    }

 public class MyRadGridViewElement : RadGridViewElement
    {
        protected override Type ThemeEffectiveType
        {
            get
            {
                return typeof(MyRadGridViewElement);
            }
        }

        protected override MasterGridViewTemplate CreateTemplate()
        {
            return new MyMasterGridViewTemplate();
        }
    }

 public class MyMasterGridViewTemplate : MasterGridViewTemplate
    {
        public override void Copy()
        {
            base.Copy();

            GridViewCellInfo[] cells = null;
            if (this.SelectionMode == GridViewSelectionMode.CellSelect)
            {
                cells = new GridViewCellInfo[this.SelectedCells.Count];
                this.SelectedCells.CopyTo(cells, 0);
            }
            else if (this.SelectionMode == GridViewSelectionMode.FullRowSelect)
            {
                GridViewDataRowInfo row = this.SelectedRows[0] as GridViewDataRowInfo;
                if (this.SelectedRows.Count == 1 && row.ViewTemplate.CurrentColumn != null)
                {
                    cells = new GridViewCellInfo[row.Cells.Count];
                    for (int i = 0; i < row.Cells.Count; i++)
                    {
                        cells[i] = row.Cells[i];
                    }
                }
            }

            if (Clipboard.GetData(DataFormats.Text) != null)
            {
                string data = Clipboard.GetData(DataFormats.Text).ToString();
                if (data != string.Empty && cells != null)
                {
                    var values = data.Split(new char[] { '\t' }, StringSplitOptions.RemoveEmptyEntries);

                    StringBuilder sb = new StringBuilder();
                    foreach (string value in values)
                    {
                        DateTime date;
                        if (DateTime.TryParse(value, out date))
                        {
                            string baseFormat = "yyyy-MM-dd HH:mm tt";
                            foreach (var cell in cells)
                            {
                                if (cell.ColumnInfo is GridViewDateTimeColumn && ((DateTime)cell.Value).ToString(baseFormat) == date.ToString(baseFormat))
                                {
                                    sb.Append(string.Format(((GridViewDateTimeColumn)cell.ColumnInfo).FormatString, cell.Value) + "\t");
                                    break;
                                }
                            }
                        }
                        else
                        {
                            sb.Append(value + "\t");
                        }
                    }

                    Clipboard.Clear();
                    Clipboard.SetData(DataFormats.Text, sb.ToString());
                }
            }
        }
    }
Completed
Last Updated: 04 Jan 2017 15:58 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 0
Category: GridView
Type: Bug Report
0
To reproduce:

public Form1()
{
    InitializeComponent();
    for (int i = 0; i < 10; i++)
    {
        this.radGridView1.Columns.Add("column " + i);
    }

    int charsCount = 5;
    for (int i = 0; i < 20; i++)
    {
        this.radGridView1.Rows.Add(new string('0', charsCount), new string('1', charsCount), 
            new string('2', charsCount), new string('3', charsCount), new string('4', charsCount),
            new string('5', charsCount), new string('6', charsCount), new string('7', charsCount), 
            new string('8', charsCount), new string('9', charsCount));
    }
    HtmlViewDefinition view = new HtmlViewDefinition();
    view.RowTemplate.Rows.Add(new RowDefinition());
    view.RowTemplate.Rows.Add(new RowDefinition());
    view.RowTemplate.Rows.Add(new RowDefinition());
    view.RowTemplate.Rows[0].Cells.Add(new CellDefinition("Column 0", 0, 1, 1));
    view.RowTemplate.Rows[0].Cells.Add(new CellDefinition("Column 1", 0, 1, 3));
    view.RowTemplate.Rows[0].Cells.Add(new CellDefinition("Column 2", 0, 1, 1));
    view.RowTemplate.Rows[0].Cells.Add(new CellDefinition("Column 3", 0, 1, 1));
    view.RowTemplate.Rows[0].Cells.Add(new CellDefinition("Column 7", 0, 1, 1));
    view.RowTemplate.Rows[1].Cells.Add(new CellDefinition("Column 4", 0, 1, 2));
    view.RowTemplate.Rows[1].Cells.Add(new CellDefinition("Column 5", 0, 2, 1));
    view.RowTemplate.Rows[1].Cells.Add(new CellDefinition("Column 8", 0, 1, 1));
    view.RowTemplate.Rows[2].Cells.Add(new CellDefinition("Column 6", 0, 2, 1));
    view.RowTemplate.Rows[2].Cells.Add(new CellDefinition("Column 9", 0, 1, 1));

    this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;

    this.radGridView1.ViewDefinition = view;
}

Workaround:
private void radGridView1_SizeChanged(object sender, EventArgs e)
{
    this.radGridView1.MasterTemplate.Refresh();
}

Completed
Last Updated: 24 Oct 2016 08:55 by ADMIN
The issue can be reproduced with the .40 version of the assemblies and in a scenario in which the grid is added as a RadMenuHostItem to the Items collection of a drop-down button.

Workaround:  set the BindingContext of the grid to equal that of the form: 
public Form1()
{
            InitializeComponent();

            radGridView1.BindingContext = this.BindingContext;
}
Completed
Last Updated: 21 Nov 2016 08:54 by ADMIN
To reproduce:

1. Use the following code:
public Form1()
{
    InitializeComponent();

    this.radGridView1.EnableFiltering = true;

    GridViewDecimalColumn col = new GridViewDecimalColumn();
    col.Name = "Calculated Column";
    col.HeaderText = "Order value";
    radGridView1.Columns.Add(col);
    radGridView1.Columns["Calculated Column"].Expression = "Freight/Sum(Freight)";
}

private void Form1_Load(object sender, EventArgs e)
{ 
    this.ordersTableAdapter.Fill(this.nwindDataSet.Orders);

    this.radGridView1.DataSource = this.ordersBindingSource;
    this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
    
    GridViewSummaryItem summaryItem = new GridViewSummaryItem();
    summaryItem.Name = "Freight";
    summaryItem.Aggregate = GridAggregateFunction.Sum ;
    GridViewSummaryRowItem summaryRowItem = new GridViewSummaryRowItem();
    summaryRowItem.Add(summaryItem);
    this.radGridView1.SummaryRowsTop.Add(summaryRowItem);
    this.radGridView1.SummaryRowsBottom.Add(summaryRowItem);
}

2. Filter the grid by EmployeeID for example. You will notice that the summary item for Freight is recalculated considering the filtered rows. However, the calculated column doesn't update its values.
Completed
Last Updated: 07 Dec 2016 07:42 by ADMIN
To reproduce:
- Select several rows and cells in excel and copy them.
- Paste in the self-reference grid.
- Only the first row is copied. 

Workaround:
private void RadGridView1_Pasting(object sender, GridViewClipboardEventArgs e)
{
    e.Cancel = true;

    List<List<string>> rows = this.GetTextData();
    PrintGridTraverser traverser = new PrintGridTraverser(this.radGridView1.MasterView);

    while (traverser.Current != this.radGridView1.CurrentRow)
    {
        traverser.MoveNext();
    }

    traverser.MovePrevious();
    int rowIndex = 0;
    int colIndex = this.radGridView1.CurrentColumn.Index;

    while (traverser.MoveNext() && rowIndex < rows.Count)
    {
        for (int i = colIndex; i < this.radGridView1.Columns.Count && i - colIndex < rows[rowIndex].Count; i++)
        {
            traverser.Current.Cells[i].Value = rows[rowIndex][i - colIndex];
        }

        rowIndex++;
    }
}

Completed
Last Updated: 16 Feb 2017 07:11 by ADMIN
How to reproduce: check the attached video as well

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        this.radGridView1.DataSource = this.GetData();
    }

    private DataTable GetData()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("Id", typeof(int));
        dt.Columns.Add("Name", typeof(string));
        dt.Columns.Add("Date", typeof(DateTime));
        dt.Columns.Add("Bool", typeof(bool));
        for (int i = 0; i < 10; i++)
        {
            dt.Rows.Add(i, "Name " + i, DateTime.Now.AddDays(i), i % 2 == 0);
        }

        return dt;
    }

    private void radButton1_Click(object sender, EventArgs e)
    {
        this.radGridView1.TableElement.ScrollToRow(0);
        this.radGridView1.Focus();
    }
}

Workaround: call the method if the row is not selected
private void radButton1_Click(object sender, EventArgs e)
{
    if (!this.radGridView1.Rows[0].IsSelected)
    {
        this.radGridView1.TableElement.ScrollToRow(0);    
    }
    
    this.radGridView1.Focus();
}
Completed
Last Updated: 05 Sep 2016 17:06 by ADMIN
To reproduce:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    Me.ProductsTableAdapter.Fill(Me.NwindDataSet.Products) 
    Me.CategoriesTableAdapter.Fill(Me.NwindDataSet.Categories)

    Me.ProductsTableAdapter.Fill(Me.NwindDataSet.Products)
    Me.CategoriesTableAdapter.Fill(Me.NwindDataSet.Categories)
    RadGridView1.AutoGenerateHierarchy = True
    RadGridView1.DataSource = Me.NwindDataSet
    RadGridView1.DataMember = "Categories"
End Sub

Private Sub RadButton1_Click(sender As Object, e As EventArgs) Handles RadButton1.Click
    Dim style As New GridPrintStyle()
    style.PrintHierarchy = True
    style.HierarchyIndent = 20
    style.ChildViewPrintMode = ChildViewPrintMode.SelectViewToPrint
    Me.RadGridView1.PrintStyle = style
    Me.RadGridView1.PrintPreview()
End Sub

Please refer to the attached gif file.

Workaround:

Private Sub RadButton1_Click(sender As Object, e As EventArgs) Handles RadButton1.Click

    Me.RadGridView1.PrintSettingsDialogFactory = New CustomGridViewPrintSettingsDialogFactory()

    Dim style As New GridPrintStyle()
    style.PrintHierarchy = True
    style.HierarchyIndent = 20
    style.ChildViewPrintMode = ChildViewPrintMode.SelectViewToPrint
    Me.RadGridView1.PrintStyle = style
    Me.RadGridView1.PrintPreview()
End Sub

Public Class CustomGridViewPrintSettingsDialog
Inherits GridViewPrintSettingsDialog 

    Sub New(document As RadPrintDocument)
        MyBase.New(document)
    End Sub
     
    Protected Overrides Sub LoadSettings()
        MyBase.LoadSettings()

        Dim gridView As RadGridView = TryCast(Me.PrintDocument.AssociatedObject, RadGridView)
        Me.printStyleSettingControl.PrintStyle.PrintHierarchy =gridView.PrintStyle.PrintHierarchy 
    End Sub
End Class

Public Class CustomGridViewPrintSettingsDialogFactory
    Implements IPrintSettingsDialogFactory

    Public Function CreateDialog(document As RadPrintDocument) As Form Implements IPrintSettingsDialogFactory.CreateDialog
        Return New CustomGridViewPrintSettingsDialog(document)
    End Function
End Class
Completed
Last Updated: 30 Nov 2016 07:24 by ADMIN
Note: if you change the image in Windows8 theme for example, the image is successfully applied.

Workaround: set the CurrentRowHeaderImage property at run time.
Completed
Last Updated: 04 Jan 2017 15:57 by ADMIN
To reproduce
- Set the AutoSize and AutoSizeRows properties to true.
- Start editing a cell.
- Exception occurs.

Workaround:
class MyGrid : RadGridView
{
    protected override void OnResize(EventArgs e)
    {
        //base.OnResize(e);
    }
}
Completed
Last Updated: 07 Dec 2016 13:49 by ADMIN
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
Completed
Last Updated: 04 Oct 2016 08:22 by ADMIN
Please refer to the attached screenshot.

To reproduce:

public Form1()
{
    InitializeComponent(); 

    DataTable dt = new DataTable();
    dt.Columns.Add("Id", typeof(int));
    dt.Columns.Add("Name", typeof(string));

    for (int i = 0; i < 5; i++)
    {
        dt.Rows.Add(i, "Item" + i);
    }

    Random rand = new Random();
    DataTable dt2 = new DataTable();
    dt2.Columns.Add("Id", typeof(int));
    dt2.Columns.Add("Name2", typeof(string));
    dt2.Columns.Add("ParentId", typeof(int));
    for (int i = 0; i < 20; i++)
    {
        dt2.Rows.Add(i, "Child Item" + i, rand.Next(0, 5));
    }

    radGridView1.DataSource = dt;
    radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
    GridViewTemplate template = new GridViewTemplate();
    template.DataSource = dt2;
    template.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
    radGridView1.MasterTemplate.Templates.Add(template);
    template.Columns["ParentId"].IsVisible = false;

    GridViewRelation relation = new GridViewRelation(radGridView1.MasterTemplate);
    relation.ChildTemplate = template;
    relation.RelationName = "MasterDetail";
    relation.ParentColumnNames.Add("Id");
    relation.ChildColumnNames.Add("ParentId");
    radGridView1.Relations.Add(relation);

    this.radGridView1.EnableFiltering = true;
    this.radGridView1.ShowFilteringRow = false;
    this.radGridView1.ShowHeaderCellButtons = true;
}

Workaround: change the Name property of the column in order to avoid duplicated columns: 

template.Columns["Name"].Name = "Name2";