Completed
Last Updated: 16 Mar 2016 13:22 by ADMIN
To reproduce:

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     Me.RadGridView1.DataSource = Me.ProductsBindingSource
     Me.ProductsTableAdapter.Fill(Me.NwindDataSet.Products)

     Dim obj As New ConditionalFormattingObject("MyCondition", ConditionTypes.Greater, "30", "", False)
     obj.CellBackColor = Color.SkyBlue
     obj.CellForeColor = Color.Red
     obj.TextAlignment = ContentAlignment.MiddleRight
     Me.RadGridView1.Columns("UnitPrice").ConditionalFormattingObjectList.Add(obj)
 End Sub

 Private Sub RadButton1_Click(sender As Object, e As EventArgs) Handles RadButton1.Click
     Dim mySQL As String = "SELECT * FROM Products where ProductName = 'Chaii'"
     Dim myTable As DataTable = getDataInTable(mySQL, My.Settings.NwindConnectionString)
     Me.RadGridView1.DataSource = myTable
 End Sub
 Public Shared Function getDataInTable(mySQLorTable As String, myConnectionString As String, Optional myTimeout As Integer = 30) As DataTable
    
     Using myConnection As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Nwind.mdb")
         Dim myCommand As New OleDb.OleDbCommand(mySQLorTable, myConnection)
         myConnection.Open()
         Dim myDataTable As New DataTable
         Dim myAdapter As New OleDb.OleDbDataAdapter(myCommand)
         myAdapter.Fill(myDataTable)
         Return myDataTable
     End Using
 End Function


When you click the button, the grid is refilled with the query result which does not contain any rows. As a result, a DataException is thrown for each column: "There is no property descriptor corresponding to property name: 'ColumnName'" .  

Workaround: clear the conditional formatting objects, reset the DataSource and add the conditional formatting objects back
Completed
Last Updated: 14 Mar 2016 08:19 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 0
Category: GridView
Type: Bug Report
0
To reproduce:
public Form1()
{
    InitializeComponent();

    BindingList<Item> items = new BindingList<Item>();
    for (int i = 0; i < 10; i++)
    {
        items.Add(new Item(i,"Item" + i , DeliveryType.Type1));
    }
    for (int i = 10; i < 20; i++)
    {
        items.Add(new Item(i, "Item" + i, DeliveryType.Type2));
    }
    for (int i = 20; i < 30; i++)
    {
        items.Add(new Item(i, "Item" + i, DeliveryType.Type3));
    }
    this.radGridView1.DataSource = items;
    this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill; 
    
    this.radGridView1.EnableFiltering = true;
    CompositeFilterDescriptor compositeFilter = new CompositeFilterDescriptor();
    compositeFilter.FilterDescriptors.Add(new FilterDescriptor("DeliveryType", FilterOperator.IsEqualTo, DeliveryType.Type2));
    compositeFilter.FilterDescriptors.Add(new FilterDescriptor("DeliveryType", FilterOperator.IsEqualTo, DeliveryType.Type3));
    compositeFilter.LogicalOperator = FilterLogicalOperator.Or;
  
    this.radGridView1.FilterDescriptors.Add(compositeFilter);
}

public class Item
{
    public int Id { get; set; }

    public string Name { get; set; }

    public DeliveryType DeliveryType { get; set; }

    public Item(int id, string name, DeliveryType deliveryType)
    {
        this.Id = id;
        this.Name = name;
        this.DeliveryType = deliveryType;
    }
}

public enum DeliveryType
{ 
    Type1,
    Type2,
    Type3
}

Workaround: use custom filtering: http://docs.telerik.com/devtools/winforms/gridview/filtering/custom-filtering
Completed
Last Updated: 25 Apr 2016 13:01 by ADMIN
Workaround: suspend columns notifications when preview dropping and resume the notification after the drag drop service has stopped:

Dim svc As RadDragDropService = Me.RadGridView1.GridViewElement.GetService(Of RadDragDropService)()
AddHandler svc.Stopped, svc_Stopped
AddHandler svc.PreviewDragDrop, AddressOf svc_PreviewDragDrop

Private Sub svc_PreviewDragDrop(sender As Object, e As RadDropEventArgs)
    For Each col As GridViewColumn In Me.RadGridView1.Columns
        col.SuspendPropertyNotifications()
    Next
End Sub

Private Function svc_Stopped() As Object
    For Each col As GridViewColumn In Me.RadGridView1.Columns
        col.ResumePropertyNotifications()
    Next
End Function
Completed
Last Updated: 29 Feb 2016 08:25 by ADMIN
To reproduce:
public partial class Form1 : Form
{
	public Form1()
	{
		InitializeComponent();
        var data = new List<Thing>();
        this.radGridView1.DataSource = data ;
        this.radGridView1.DataError += RadGridView1_DataError;
	}

    private void RadGridView1_DataError(object sender, Telerik.WinControls.UI.GridViewDataErrorEventArgs e)
    {
       
    }

    public class Thing
	{
		private Thing() { }
	}
}
Completed
Last Updated: 06 Jul 2016 15:36 by ADMIN
To reproduce: 
1.Set the GridView template's ViewDefinition to ColumnGroups
2.Add a new column
3.Delete the column
4.Add another new column. The PropertyBuilder closes and it is not possible to open the Smart Tag of RadGridView anymore. Please refer to the attached gif file.

Workaround:
The issue is caused by a remaining reference to a deleted column. When using the RadGridView PropertyBuilder and a column is added to ColumnGroupsViewDefinition, once the column is deleted from RadGridView (via the Property Builder) the code for adding the column in the ColumnGroupsViewDefinition remains, and this causes further designer instability with the Property Builder.

To handle this scenario there are two options:
1. When a column is deleted via Property Builder, and this column was part of ColumnGroupsViewDefinition, open the Designer.cs/vb file, locate the line that adds this column to a ColumnNames collection and delete it. It should be something like:
gridViewColumnGroupRow3.ColumnNames.Add("column1"); - where "column1" is the name of the deleted column

2. Instead of using the Property Builder to build the ColumnGroupsViewDefinition, build it programmatically.
Completed
Last Updated: 07 Mar 2016 13:30 by ADMIN
To reproduce:
- Sort the grid and then reset the data source.
- Format the rows like this:
void radGridView1_RowFormatting(object sender, Telerik.WinControls.UI.RowFormattingEventArgs e)
{
    string exception_status = "";
    string completed_user = "";

    if (!DBNull.Value.Equals(e.RowElement.RowInfo.Cells["Name"].Value))
    {
        exception_status = e.RowElement.RowInfo.Cells["Name"].Value.ToString();
    }

    if (!DBNull.Value.Equals(e.RowElement.RowInfo.Cells["Drug"].Value))
    {
        completed_user = e.RowElement.RowInfo.Cells["Drug"].Value.ToString().Trim();
    }

    if (exception_status == "Sam" && completed_user == "Enebrel")
    {
        e.RowElement.ForeColor = Color.Red;
    }
    else
    {
        e.RowElement.ForeColor = Color.Black;
    }
}
Workaround:
if (e.RowElement.RowInfo.Cells.Count ==0)
{
    return;
}
Completed
Last Updated: 14 Mar 2016 08:00 by ADMIN
To reproduce:

BindingList<Item> items = new BindingList<Item>();

public Form1()
{
    InitializeComponent();
    
    for (int i = 0; i < 5; i++)
    {
        items.Add(new Item(i,i * 1.25m));
    }
    this.radGridView1.DataSource = items;
    this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;

    GridViewSummaryItem summaryItem = new GridViewSummaryItem();
    summaryItem.Name = "Price";
    summaryItem.Aggregate = GridAggregateFunction.Sum;
    GridViewSummaryRowItem summaryRowItem = new GridViewSummaryRowItem();
    summaryRowItem.Add(summaryItem);
    this.radGridView1.SummaryRowsTop.Add(summaryRowItem);
    this.timer1.Start();
}

public class Item  
{
    private int id;
    private decimal price;

    public Item(int id, decimal price)
    {
        this.id = id;
        this.price = price;
    }

    public int Id
    {
        get
        {
            return this.id;
        }
        set
        {
            this.id = value;
        }
    }

    public decimal Price
    {
        get
        {
            return this.price;
        }
        set
        {
            this.price = value; 
        }
    }
}

private void timer1_Tick(object sender, EventArgs e)
{
    items[0].Price += 1;
    this.radGridView1.Rows[0].InvalidateRow();
    this.radGridView1.MasterView.SummaryRows[0].InvalidateRow(); 
}

Workaround: refresh the MasterTemplate or implement the INotifyPropertyChanged
Completed
Last Updated: 16 Feb 2016 09:12 by ADMIN
Work around: create a custom GridCheckBoxHeaderCellElement and override the SetCheckBoxState method

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

    protected override Type ThemeEffectiveType
    {
        get { return typeof(GridHeaderCellElement); }
    }

    protected override bool SetCheckBoxState()
    {
        bool foundNonCheckedRows = false;
        foreach (GridViewRowInfo row in this.ViewInfo.Rows)
        {
            foundNonCheckedRows = this.CheckCheckBoxValueForAllRows(row, foundNonCheckedRows);
            if (foundNonCheckedRows)
            {
                SetCheckBoxState(ToggleState.Off);
                break;
            }
        }

        if (!foundNonCheckedRows && this.ViewInfo.Rows.Count > 0) //we must have at least one row in order to check the header cell
        {
            SetCheckBoxState(ToggleState.On);
        }

        return foundNonCheckedRows;
    }

    private bool CheckCheckBoxValueForAllRows(GridViewRowInfo row, bool foundNonCheckedRows)
    {
        GridViewChildRowCollection currentRowColection;
        if (foundNonCheckedRows)
        {
            return foundNonCheckedRows;
        }


        if (row.HasChildRows())
        {
            currentRowColection = row.ChildRows;
        }
        else
        {
            currentRowColection = row.ViewInfo.Rows;
        }

        foreach (GridViewRowInfo rowInfo in currentRowColection)
        {
            GridViewGroupRowInfo groupInfo = rowInfo as GridViewGroupRowInfo;
            if (groupInfo != null)
            {
                foundNonCheckedRows = this.CheckCheckBoxValueForAllRows(groupInfo, foundNonCheckedRows);
            }
            else
            {
                object cellValue = rowInfo.Cells[this.ColumnIndex].Value;
                bool? valueFromColumnTypeConvertor = null;
                if (this.ColumnInfo is GridViewDataColumn)
                {
                    TypeConverter convertor = ((GridViewDataColumn)this.ColumnInfo).DataTypeConverter;
                    if (convertor != null && (convertor.CanConvertTo(typeof(bool)) || convertor.CanConvertTo(typeof(ToggleState))))
                    {
                        try
                        {
                            valueFromColumnTypeConvertor = Convert.ToBoolean(convertor.ConvertTo(cellValue, typeof(bool)));
                        }
                        catch (FormatException)//convert to bool fails
                        {
                        }
                        catch (NotSupportedException)//coverting NULL
                        {
                        }
                    }
                }

                try
                {
                    if (rowInfo != this.RowInfo &&
                        (cellValue == null || cellValue == DBNull.Value) ||
                        (valueFromColumnTypeConvertor.HasValue && !valueFromColumnTypeConvertor.Value) ||
                        (!valueFromColumnTypeConvertor.HasValue && !Convert.ToBoolean(cellValue)))
                    {
                        foundNonCheckedRows = true;
                    }
                }
                catch (FormatException)//convert to bool fails
                {
                }
            }
        }

        return foundNonCheckedRows;
    }
}

Completed
Last Updated: 07 Mar 2016 09:53 by ADMIN
To reproduce:
- Add 100000 rows to the grid.
- Filter the grid so there are no rows.
- Call the BestFitColumns method:
radGridView1.MasterTemplate.BestFitColumns(Telerik.WinControls.UI.BestFitColumnMode.DisplayedCells)

Workaround:
If gridview.MasterTemplate.DataView.Count > 0 Then
	gridview.MasterTemplate.BestFitColumns()
End If

Completed
Last Updated: 07 Mar 2016 14:38 by ADMIN
To reproduce:

public Form1()
{
    InitializeComponent();
    DataTable dt = new DataTable();
    for (int i = 0; i < 10; i++)
    {
        dt.Columns.Add("Col" + i);
    }

    for (int i = 0; i < 10; i++)
    {
        DataRow row = dt.NewRow();
        foreach (DataColumn col in dt.Columns)
        {
            row[col.ColumnName] = "Data " + i + "." + dt.Columns.IndexOf(col);
        }
        dt.Rows.Add(row);
    }
    this.radGridView1.DataSource = dt;
    this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;

    this.radGridView1.AddNewRowPosition = Telerik.WinControls.UI.SystemRowPosition.Bottom;
    this.radGridView1.Columns[9].IsVisible = false;
    this.radGridView1.Columns[8].ReadOnly = true;

    this.radGridView1.Columns[2].IsVisible = false;
    this.radGridView1.Columns[4].IsVisible = false;
    this.radGridView1.Columns[6].IsVisible = false;
}


Workaround: use a custom row behavior and control what to be the selected cell when pressing the Tab key for example: 

public Form1()
{
    InitializeComponent();
    DataTable dt = new DataTable();
    for (int i = 0; i < 10; i++)
    {
        dt.Columns.Add("Col" + i);
    }

    for (int i = 0; i < 10; i++)
    {
        DataRow row = dt.NewRow();
        foreach (DataColumn col in dt.Columns)
        {
            row[col.ColumnName] = "Data " + i + "." + dt.Columns.IndexOf(col);
        }
        dt.Rows.Add(row);
    }
    this.radGridView1.DataSource = dt;
    this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;

    this.radGridView1.AddNewRowPosition = Telerik.WinControls.UI.SystemRowPosition.Bottom;
    this.radGridView1.Columns[9].IsVisible = false;
    this.radGridView1.Columns[8].ReadOnly = true;

    this.radGridView1.Columns[2].IsVisible = false;
    this.radGridView1.Columns[4].IsVisible = false;
    this.radGridView1.Columns[6].IsVisible = false;

    //register the custom row  behavior
    BaseGridBehavior gridBehavior = radGridView1.GridBehavior as BaseGridBehavior;
    gridBehavior.UnregisterBehavior(typeof(GridViewNewRowInfo));
    gridBehavior.RegisterBehavior(typeof(GridViewNewRowInfo), new CustomGridHierarchyRowBehavior());
}

public class CustomGridHierarchyRowBehavior : GridNewRowBehavior
{
    protected override bool ProcessTabKey(KeyEventArgs keys)
    {
        bool isLastColumn = this.Navigator.IsLastColumn(this.GridControl.CurrentColumn);
        bool result = base.ProcessTabKey(keys);
        if (isLastColumn)
        {
            this.GridControl.CurrentColumn = this.GridControl.Columns[0];
            this.GridControl.BeginEdit();
        }
        return result;
    }
}
Completed
Last Updated: 23 Feb 2016 07:05 by ADMIN
To reproduce:
- Add date time column to a grid and set the MaskType to FreeFormDateTime (this can be done by accessing the editor in the CellEditorInitialized event).
- Type a year in the editor and click the right arrow key until the cell is changed.

Workaround:
class MyRadDateTimeEditor : RadDateTimeEditor
{
    bool isRightmostMaskItemSelected = false;

    public override void OnKeyDown(KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Right)
        {
            FreeFormDateTimeProvider provider = ((RadDateTimeEditorElement) this.EditorElement).TextBoxElement.Provider as FreeFormDateTimeProvider; 
            if (provider.TextBoxItem.SelectionStart == provider.TextBoxItem.Text.Length)
            {
                this.isRightmostMaskItemSelected = true;
            }
        }
        else
        {
            base.OnKeyDown(e);
        }
    }
    protected override void OnKeyUp(KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Right)
        {
            if (isRightmostMaskItemSelected)
            {
                isRightmostMaskItemSelected = false;
                GridDateTimeCellElement cell = this.OwnerElement as GridDateTimeCellElement;
                cell.GridControl.EndEdit();
            }
        }
        else
        {
            base.OnKeyUp(e);
        }
    }
}

void radGridView1_CellEditorInitialized(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e)
{
    RadDateTimeEditor editor = e.ActiveEditor as RadDateTimeEditor;
    if (editor != null)
    {
        var editorElement = editor.EditorElement as RadDateTimeEditorElement;
        editorElement.TextBoxElement.MaskType = MaskType.FreeFormDateTime;
    }
}
Completed
Last Updated: 08 Feb 2016 11:37 by ADMIN
Completed
Last Updated: 25 May 2016 13:20 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 4
Category: GridView
Type: Bug Report
0
Please find attached a sample project.

1. Select the new row and activate te editor.
2. Do not enter any value and click outside the new row. The exception is thrown.

Workaround: bind directly to the query result:
this.radGridView1.DataSource = (from p in context.Customers select p).ToList();
Completed
Last Updated: 11 Feb 2016 13:29 by ADMIN
To reproduce:
-Create a new ColumnGroupsViewDefinition and pin the first group.
- Asign the view to the grid.

Workaround:
Pin the group after the view is asigned.
 
Completed
Last Updated: 07 Mar 2016 10:25 by ADMIN
To reproduce: use the attached sample project

Workaround: refresh the template when updating the data source:
this.radGridView1.MasterTemplate.Refresh();
Completed
Last Updated: 16 Mar 2016 13:23 by ADMIN
To reproduce:
- Use RowFormatting to change the font style to bold.
- Call the  BestFitColumns method.

Completed
Last Updated: 10 Feb 2016 05:53 by ADMIN
To reproduce:
- Add a grid with some columns at design time.
- Open the designer code and you will notice the TableViewDefinition.

Workaround:
Manually delete the TableViewDefinition. 
Completed
Last Updated: 19 Feb 2016 15:46 by ADMIN
Note: as a result ArgumentException is thrown when accessing a cell value.

To reproduce:

private DataTable dt;
private GridViewRowInfo selectedRow;

public Form1()
{
    InitializeComponent();

    PopulateGrid();
    PopulateGrid();
} 

private void PopulateGrid()
{
    dt = new DataTable();
    dt.Columns.Add("Version No", typeof(Int32));

    DataRow dr = dt.NewRow();
    dr["Version No"] = 2385;
    dt.Rows.Add(dr);

    this.radGridView1.DataSource = dt;

    MessageBox.Show(selectedRow.Cells[0].ColumnInfo.Name);
    MessageBox.Show(selectedRow.Cells[0].Value.ToString()); //This will error on the second time through
}

private void radGridView1_CurrentRowChanged(object sender, CurrentRowChangedEventArgs e)
{
    //This event is not firing on the second population of the grid in the new Telerik version.
    //In the old version, it did

    if (!this.radGridView1.CurrentRow.IsSystem && !this.radGridView1.CurrentRow.HasChildRows() && this.radGridView1.CurrentRow.Cells.Count > 0)
        selectedRow = this.radGridView1.CurrentRow;
}

Workaround: use the RadGridView.CurrentRow property directly when accessing the cell value.
Completed
Last Updated: 07 Mar 2016 14:14 by ADMIN
To reproduce:
- Add some columns to a grid and make one read-only.
- Add a value to the new row then click the read-only cell.
- Click outside of the grid (focus another control). 
- The new row is not added.

Workaround:
radgridView1.EndEdit()
radgridView1.MasterView.TableAddNewRow.EndAddNewRow()

Completed
Last Updated: 11 Feb 2016 14:42 by ADMIN
Please refer to the attached sample project.

Workaround:

public class MyGridCheckBoxCellElement : GridCheckBoxCellElement
{
    public MyGridCheckBoxCellElement(GridViewColumn column, GridRowElement row) : base(column, row)
    {
    }

    protected override Type ThemeEffectiveType
    {
        get
        {
            return typeof(GridCheckBoxCellElement);
        }
    }

    public override bool IsCompatible(GridViewColumn data, object context)
    {
        GridViewCheckBoxColumn col = data as GridViewCheckBoxColumn;
        if (col != null)
        {
            return col.ThreeState == ((RadCheckBoxEditor)this.Editor).ThreeState;
        }
        return base.IsCompatible(data, context);
    }
}

private void radGridView1_CreateCell(object sender, GridViewCreateCellEventArgs e)
{
    if (e.CellType == typeof(GridCheckBoxCellElement))
    {
        e.CellElement = new MyGridCheckBoxCellElement(e.Column, e.Row);
    }
}