Completed
Last Updated: 08 Jan 2015 12:02 by ADMIN
To reproduce:
1. Add text box and check box column to the grid. Add a filter descriptor to the text box column
2. Bind it to a DataTable with some data
3. Clear the columns
4. Add the columns once again => the exception will be thrown 

Workaround.

1. Create the following cell element:
    class MyHeaderCell : GridCheckBoxHeaderCellElement
    {
        public MyHeaderCell(GridViewColumn column, GridRowElement row)
            : base(column, row)
        {

        }

        protected override bool SetCheckBoxState()
        {
            if (this.ColumnIndex == -1)
            {
                return false;
            }

            return base.SetCheckBoxState();
        }
    }
2. Subscribe to the grid's CreateCell event
3. Put the modified cell in action:
        void radGridView_CreateCell(object sender, GridViewCreateCellEventArgs e)
        {
            if (e.CellType == typeof(GridCheckBoxHeaderCellElement))
            {
                e.CellType = typeof(MyHeaderCell);
            }
        }
Completed
Last Updated: 26 Jan 2015 14:37 by ADMIN
To reproduce:
- Add GridViewCheckBoxColumn and set the EnableHeaderCheckBox property to true.
- Mark all check boxes and change the data source of the grid (use one where not all values are set to true).

Workaround:
Add new column when the data source is changed.
Completed
Last Updated: 12 May 2021 12:33 by ADMIN
Release R2 2021
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 1
Category: GridView
Type: Bug Report
12
To reproduce:
1.Add a RadGridView with one column.
2.Select the form and in the Properties window, set the form's Localizable property to true.
3.Specify the column's HeaderText for the default language.
4.Set the form's Language property to French (France).
5.Specify the column's HeaderText for  French (France).
6.Set the CurrentUICulture before the InitializeComponent method to "fr-FR". If you run the application, the column is localized as expected.
7.If you get back to the designer and change the form's Language property back to Default you will notice that the column's HeaderText disappears.

Workaround: set the HeaderText programmatically according to the current language.
Completed
Last Updated: 23 Dec 2014 07:54 by ADMIN
Currently if a user hits the decimal separator key the grid opens a cell for edit and selects its content. If the user does not notice this he may enter 1 instead of 0.1
Completed
Last Updated: 07 Jan 2015 16:33 by ADMIN
To reproduce:
- Add combobox column and filter the grid so just one row is visible.
- In CellValueChanged event show a message box.
- Change the value in the combo box column and click in the white space of the grid.

Workaround:
public class MyGridComboBoxCellElement : GridComboBoxCellElement
{
    public MyGridComboBoxCellElement(GridViewColumn column, GridRowElement row) : base(column, row)
    {
    }

    public override void SetContent()
    {
        if (this.ColumnInfo != null)
        {
            base.SetContent();
        }
    }
    protected override Type ThemeEffectiveType
    {
        get
        {
            return typeof(GridComboBoxCellElement);
        }
    }
}

void radGridView1_CreateCell(object sender, GridViewCreateCellEventArgs e)
{
    if (e.CellType == typeof(GridComboBoxCellElement))
    {
        e.CellElement = new MyGridComboBoxCellElement(e.Column, e.Row);
    }
}
Completed
Last Updated: 23 Mar 2015 15:09 by ADMIN
Declined
Last Updated: 08 Sep 2015 11:31 by ADMIN
Synchronization between the filter descriptors collection and the excel like filtering.
Unplanned
Last Updated: 30 Mar 2016 07:58 by ADMIN
To reproduce:

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

    GridViewMultiComboBoxColumn col = new GridViewMultiComboBoxColumn("MCCB column");
    col.DataSource = this.customersBindingSource;
    col.DisplayMember = "ContactName";
    col.ValueMember = "CustomerID";
    this.radGridView1.Columns.Add(col);
    this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
}

private void radGridView1_UserAddingRow(object sender, Telerik.WinControls.UI.GridViewRowCancelEventArgs e)
{
    if (e.Rows.First().Cells[0].Value+"" =="ALFKI")
    { 
        MessageBox.Show("Please select a product", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        e.Cancel = true;

        this.radGridView1.BeginEdit();
    }
}

Please refer to the attached gif file.

Workaround: use the NumericUpDown.MouseDown event and call the RadGridView.BeginEdit method instead of activating the editor in the UserAddingRow event.
Completed
Last Updated: 26 Jan 2015 14:01 by ADMIN
To reproduce: 
- Bind the grid to a self reference data, it should contain nullable bool value as well.
- Add checkbox column:
GridViewCheckBoxColumn chkBoxColumn = new GridViewCheckBoxColumn();
chkBoxColumn.EnableHeaderCheckBox = true;
chkBoxColumn.ThreeState = true;
chkBoxColumn.EditMode = EditMode.OnValueChange;

- Start and uncheck and check one of the cells (in a data row)

Workaround:
public class MyGridCheckBoxHeaderCellElement : GridCheckBoxHeaderCellElement
{
    public MyGridCheckBoxHeaderCellElement(GridViewColumn column, GridRowElement row) : base(column,row)
    {
    }

    protected override bool SetCheckBoxState()
    {
        bool hasNullValue = false;
        foreach (GridViewRowInfo row in this.ViewInfo.Rows)
        {
            object cellValue = row.Cells[this.ColumnIndex].Value;
            if (cellValue == null)
            {
                hasNullValue = true;
            }
        }

        if (!hasNullValue)
        {
            return base.SetCheckBoxState();
        }

        SetCheckBoxState(ToggleState.Indeterminate);
        return false;
    }
}
Completed
Last Updated: 27 May 2015 08:34 by ADMIN
To reproduce:
1. Set the RadGridView.MultiSelect property to true.
2. Set the SelectionMode = Telerik.WinControls.UI.GridViewSelectionMode.CellSelect
3. When you select multiple cells, the SelectedCells collection stores the cells in reversed order instead of keeping the selection order. Compared to GridViewSelectionMode.FullRowSelect, this behavior is different.

Workaround: iterate the SelectedCells collection in reversed order
Completed
Last Updated: 15 Sep 2015 13:37 by ADMIN
To reproduce: use the following code snippet and perform the steps illustrated on the attached gif file.

radGridView1.Columns.Add(new GridViewTextBoxColumn("A", "A"));
radGridView1.Columns.Add(new GridViewTextBoxColumn("B", "B"));
radGridView1.Columns.Add(new GridViewTextBoxColumn("C", "C"));
radGridView1.Columns.Add(new GridViewTextBoxColumn("D", "D"));
radGridView1.Columns.Add(new GridViewTextBoxColumn("E", "E"));
radGridView1.Columns.Add(new GridViewTextBoxColumn("F", "F"));


radGridView1.Columns[0].Width = 150;
radGridView1.Columns[1].Width = 150;
radGridView1.Columns[2].Width = 150;
radGridView1.Columns[3].Width = 150;
radGridView1.Columns[4].Width = 150;
radGridView1.Columns[5].Width = 150;

radGridView1.Rows.Add("A", "B", "C", "D", "E", "F");
radGridView1.Rows.Add("A", "B", "C", "D", "E", "F");
radGridView1.Rows.Add("A", "B", "C", "D", "E", "F");
radGridView1.Rows.Add("A", "B", "C", "D", "E", "F");
radGridView1.Rows.Add("A", "B", "C", "D", "E", "F");
radGridView1.Rows.Add("A", "B", "C", "D", "E", "F");
radGridView1.Rows.Add("A", "B", "C", "D", "E", "F");

Workaround: 

private void radGridView1_Resize(object sender, EventArgs e)
{
    if (this.radGridView1.IsInEditMode)
    {
        this.radGridView1.EndEdit();
        this.radGridView1.BeginEdit();              
    }
}

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

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

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

    protected override GridViewEditManager CreateEditorManager()
    {
        return new CustomGridViewEditManager(this);
    }
}

public class CustomGridViewEditManager : GridViewEditManager
{
    public CustomGridViewEditManager(RadGridViewElement gridViewElement) : base(gridViewElement)
    {
    }

    protected override void InitializeEditor(IInputEditor activeEditor)
    {
        if (activeEditor == null)
        {
            activeEditor = this.GridViewElement.CurrentColumn.GetDefaultEditor();
            this.ActiveEditor = activeEditor;
        }
        base.InitializeEditor(activeEditor);
    }
}
Completed
Last Updated: 22 May 2015 13:50 by ADMIN
To reproduce: Open Demo application >> GridView >> Export >> Export Hierarchy
Completed
Last Updated: 24 Aug 2015 13:05 by ADMIN
To reproduce:

public Form1()
{
    InitializeComponent();

    DataTable dt = new DataTable();

    DataColumn colId = new DataColumn("Id", typeof(int));
    DataColumn colItem = new DataColumn("Item", typeof(string));
    DataColumn colPrice = new DataColumn("Price", typeof(decimal));

    dt.Columns.Add(colId);
    dt.Columns.Add(colItem);
    dt.Columns.Add(colPrice);

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

    GridViewDecimalColumn col = new GridViewDecimalColumn();
    col.HeaderText = "Id";
    col.Name = "Id";
    col.FieldName = "Id";

    radGridView1.Columns.Add(col);

    GridViewTextBoxColumn col1 = new GridViewTextBoxColumn();
    col1.HeaderText = "Item";
    col1.Name = "Item";
    col1.FieldName = "Item";

    radGridView1.Columns.Add(col1);

    GridViewMaskBoxColumn col2 = new GridViewMaskBoxColumn();
    col2.HeaderText = "Price";
    col2.Name = "Price";
    col2.FieldName = "Price";

    col2.MaskType = MaskType.Standard;
    col2.Mask = "###";
    col2.TextMaskFormat = MaskFormat.ExcludePromptAndLiterals;

    radGridView1.Columns.Add(col2);
    radGridView1.DataSource = dt;
    this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;

    this.radGridView1.ValueChanging += radGridView1_ValueChanging;
    this.radGridView1.ValueChanged += radGridView1_ValueChanged;
}

private void radGridView1_ValueChanged(object sender, EventArgs e)
{
    Console.WriteLine("ValueChanged");
}

private void radGridView1_ValueChanging(object sender, ValueChangingEventArgs e)
{
    Console.WriteLine("ValueChanging >> old value: " + e.OldValue + " new value: " + e.NewValue);
}


Declined
Last Updated: 24 Aug 2015 13:05 by ADMIN
DECLINED: This happens because you are setting a non-image value to a GridViewImageColumn. The GridViewImageColumn is designed to work with image data directly and if any non-image data is used with this column, this will result in a large number of internal exceptions which are thrown while the column tries to read the image. The throw operation is an expensive one and this causes the slowdown. Also, note that the slowdown is much heavier when running the application with the debugger attached, because when this is the case, each internally thrown exception is written to the console, and writing to the console is an even more expensive operation. 

If the image is to be applied on the CellFormatting event and the value of the cells in a column are not going to be images, then GridViewTextBoxColumn should be used instead.

To reproduce: add a RadGridView and an  ImageList with two images. Use the following code snippet:

public Form1()
{
    InitializeComponent();

    DataTable dt = new DataTable();
    for (int i = 0; i < 10; i++)
    {
        dt.Columns.Add("Pic" + i);
    }
    
    for (int i = 0; i < 100; i++)
    {
        DataRow newRow = dt.NewRow();
        foreach (DataColumn col in dt.Columns)
        {
            newRow[col.ColumnName] = i;
        }
        dt.Rows.Add(newRow);
    }
    radGridView1.AutoGenerateColumns = false;
    
    for (int i = 0; i < 10; i++)
    {
        GridViewImageColumn imgCol = new GridViewImageColumn("col" + i);
        imgCol.Width = 100;
        imgCol.FieldName = "Pic" + i;
        this.radGridView1.Columns.Add(imgCol);
    }

    this.radGridView1.DataSource = dt;

    this.radGridView1.CellFormatting += radGridView1_CellFormatting;
}

private void radGridView1_CellFormatting(object sender, CellFormattingEventArgs e)
{
    if (e.Row is GridViewDataRowInfo)
    {
        e.CellElement.Image = this.imageList1.Images[e.RowIndex % 2];
    }
}
Completed
Last Updated: 28 Nov 2014 06:56 by ADMIN
To reproduce:

public Form1()
{
    InitializeComponent();

    BindingSource bs1 = new BindingSource();
    BindingSource bs2 = new BindingSource();

    DataTable dt1 = new DataTable();
    dt1.Columns.Add("MortgageId", typeof(string));
    dt1.Columns.Add("MortgageNo", typeof(string));
    for (int i = 0; i < 50; i++)
    { 
        dt1.Rows.Add(i, Guid.NewGuid().ToString().Substring(0, 5));              
    }
    bs1.DataSource = dt1;

    DataTable dt2 = new DataTable();
    dt2.Columns.Add("PaymentCode", typeof(string));
    dt2.Columns.Add("Description", typeof(string));

    for (int i = 0; i < 50; i++)
    {
        dt2.Rows.Add(Guid.NewGuid().ToString().Substring(0, 5), Guid.NewGuid().ToString().Substring(0, 5));
    }
    bs2.DataSource = dt2;

    GridViewMultiComboBoxColumn col1 = new GridViewMultiComboBoxColumn("MortgageId");          
    col1.DataSource = bs1;
    col1.FieldName = "MortgageId";
    col1.DisplayMember = "MortgageId";
    col1.ValueMember = "MortgageId";
    col1.Width = 70;
    this.radGridView1.Columns.Add(col1);

    col1 = new GridViewMultiComboBoxColumn("PaymentCode");         
    col1.DataSource = bs2;
    col1.DisplayMember = "PaymentCode";
    col1.ValueMember = "PaymentCode";
    col1.FieldName = "PaymentCode";
    col1.Width = 70;
    this.radGridView1.Columns.Add(col1);

    this.radGridView1.CellEditorInitialized += radGridView1_CellEditorInitialized;
}

private void radGridView1_CellEditorInitialized(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e)
{
    if (e.Column.Name == "MortgageId")
    {
        RadMultiColumnComboBoxElement editor = e.ActiveEditor as RadMultiColumnComboBoxElement;
        if (editor != null)
        {
            editor.EditorControl.FilterDescriptors.Clear();
            editor.EditorControl.Columns.Clear();
            editor.EditorControl.MasterTemplate.AutoGenerateColumns = false;
            editor.EditorControl.Columns.Add(new GridViewTextBoxColumn("MortgageId"));
            editor.EditorControl.Columns.Add(new GridViewTextBoxColumn("MortgageNo"));
            editor.DropDownWidth = 200;    
        }
        return;
    }
    if (e.Column.Name == "PaymentCode")
    {
        RadMultiColumnComboBoxElement editor = e.ActiveEditor as RadMultiColumnComboBoxElement;
        if (editor != null)
        {
            editor.EditorControl.FilterDescriptors.Clear();
            editor.EditorControl.Columns.Clear();
            editor.EditorControl.MasterTemplate.AutoGenerateColumns = false;
            editor.EditorControl.Columns.Add(new GridViewTextBoxColumn("PaymentCode"));
            editor.EditorControl.Columns.Add(new GridViewTextBoxColumn("Description"));
            editor.DropDownWidth = 200;    
        }
        return;
    }
}


Workaround: do not set the RadMultiColumnComboBoxElement.EditorControl.MasterTemplate.AutoGenerateColumns property to false in the CellEditorInitialized event .
Completed
Last Updated: 26 Jun 2015 11:08 by ADMIN
To reproduce:

1. Add a RadGridView with two GridViewMultiComboBoxColumns at design time.
2. Bind both of the columns at design time to two different data sources.
3. In the CellEditorInitialized event, set the RadMultiColumnComboBoxElement.AutoSizeDropDownToBestFit property to true.
4. Run the application and open the editor for one of the GridViewMultiComboBoxColumns . You will notice that the columns are automatically sized to fit the content. However, if you open the editor for the other GridViewMultiComboBoxColumn, you will see that columns are not auto sized correctly.  Please refer to the attached gif file.

Workaround:
private void radGridView1_CellEditorInitialized(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e)
{
    RadMultiColumnComboBoxElement mccbEditor = e.ActiveEditor as RadMultiColumnComboBoxElement;
    if (mccbEditor != null)
    {
        mccbEditor.AutoSizeDropDownToBestFit = true;
        mccbEditor.PopupOpening -= mccbEditor_PopupOpening;
        mccbEditor.PopupOpening += mccbEditor_PopupOpening;
    }
}

private void mccbEditor_PopupOpening(object sender, CancelEventArgs e)
{
    RadMultiColumnComboBoxElement mccbEditor = sender as RadMultiColumnComboBoxElement;
    if (mccbEditor != null)
    { 
        mccbEditor.EditorControl.BestFitColumns(BestFitColumnMode.AllCells);
        int width = 0;
        foreach (GridViewColumn c in mccbEditor.EditorControl.Columns)
        {
            width += c.Width;
        }
        width += mccbEditor.EditorControl.TableElement.VScrollBar.Size.Width;
        
        mccbEditor.MultiColumnPopupForm.Size = new Size(width, mccbEditor.MultiColumnPopupForm.Size.Height);
    }
}
Completed
Last Updated: 12 Dec 2014 15:12 by ADMIN
To reproduce:
-Try to format the cell value by using html in the HTMLCellFormatting event.

Resolution: You should set the ExcapeHTMLChars property of the CellElement to false in order to format the content of the cell with HTML tags. This can be done in the HTMLCellFormatting event handler of the exporter.
Completed
Last Updated: 13 Oct 2015 10:11 by ADMIN
To reproduce: 
- Add grid to a blank form. 
- Add summary rows and group descriptors.
- Add rows upon a button click.
- You will notice that not all rows are visible.

Workaround: 
radGridView1.TableElement.Update(GridUINotifyAction.RowHeightChanged, null);
radGridView1.TableElement.VScrollBar.Value = radGridView1.TableElement.VScrollBar.Maximum - radGridView1.TableElement.VScrollBar.LargeChange;
Completed
Last Updated: 20 Oct 2015 09:04 by ADMIN
Use the following code snippet:

public Form1()
{
    InitializeComponent();

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

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

    this.radGridView1.DataSource = dt;
    GridViewDecimalColumn customCalculatedCol = new GridViewDecimalColumn("Custom Calculated Column");
    customCalculatedCol.Name = "Custom Calculated Column";
    customCalculatedCol.Expression = "SumIf(Id)";
    radGridView1.Columns.Add(customCalculatedCol);

    GridViewDecimalColumn customCalculatedCola = new GridViewDecimalColumn("Custom Col_A");         
    radGridView1.Columns.Add(customCalculatedCola);

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

    Telerik.Data.Expressions.ExpressionContext.Context = new CustomExpressionContext(radGridView1);
}

public class CustomExpressionContext : Telerik.Data.Expressions.ExpressionContext
{
    private RadGridView grid;

    public CustomExpressionContext(RadGridView grid)
    {
        this.grid = grid;
    }

    public double SumIf(int currentId)
    {
        double countIf = 0;
        decimal sumIf = 0;
        foreach (GridViewRowInfo r in this.grid.Rows)
        {
            if ((int)r.Cells["Id"].Value == currentId)
            {
                countIf++;
                sumIf += (decimal)r.Cells["Price"].Value;
            }

           
        }
        return (double)sumIf;
    }
}

Workaround: invalidate the affected rows manually

private void radGridView1_CellValueChanged(object sender, GridViewCellEventArgs e)
{
    if (e.Column.Name == "Price" || e.Column.Name == "Id")
    {
        foreach (GridViewRowInfo r in this.radGridView1.Rows)
        {
            if ((int)r.Cells["Id"].Value == (int)e.Row.Cells["Id"].Value)
            {
                r.InvalidateRow();
            }
        }
    }
}
Completed
Last Updated: 21 Nov 2014 13:09 by ADMIN
To reproduce:

public Form1()
{
    InitializeComponent();

    List<DiffItem> diffItemsMain = GetSampleDataDiffItems(12500);
    radGridView1.DataSource = diffItemsMain;
    radGridView1.Relations.AddSelfReference(radGridView1.MasterTemplate, "Index", "ParentIndex");
    radGridView1.MasterTemplate.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
}

private List<DiffItem> GetSampleDataDiffItems(int rootInstances)
{
    List<DiffItem> diffItems = new List<DiffItem>();
    for (int j = 0; j < rootInstances; j++)
    {
        string[,] sampleData = GetSampleDataArray();
        string parentIndex = "";
        for (int i = 0; i <= sampleData.GetUpperBound(0); i++)
        {
            DiffItem diffItem = new DiffItem(Guid.NewGuid().ToString());  
            diffItem.ObjectStatus = sampleData[i, 0];                            
            diffItem.ObjectType = sampleData[i, 1];                          
            diffItem.ObjectLabel = sampleData[i, 2];                          
            diffItem.ChangeType = sampleData[i, 3];                          
            diffItem.ObjectAccepted = sampleData[i, 4];                          
            diffItem.ParentIndex = parentIndex;                                 
            diffItems.Add(diffItem);
            parentIndex = diffItem.Index;
        }
    }
    return diffItems;
}

private string[,] GetSampleDataArray()
{
    string[,] sampleData = new string[,]
    {
        { "New", "Parent", "A572", "Added", "Undecided" },
        { "New", "Child", "CM1", "Added", "Undecided" },
        { "Modified", "GrandChild", "A573", "Modified", "Undecided" },
        { "Modified", "GreatGrandChild", "CM2", "Modified", "Undecided" }
    };
    return sampleData;
}

public class DiffItem
{
    public DiffItem(string index)
    {
        Index = index;
    }

    public string ObjectStatus { get; set; }

    public string Index { get; set; }

    public bool ObjectSelected { get; set; }

    public string ObjectType { get; set; }

    public string ObjectLabel { get; set; }

    public string ChangeType { get; set; }

    public string ObjectAccepted { get; set; }

    public string ParentIndex { get; set; }
}

Try to edit one random cell. You will notice that after pressing the Enter key to commit the changes, the editor is closed after a few seconds.

Resolution: 
The slowdown should be experienced only when editing columns which participate in the self-reference relation.