Completed
Last Updated: 04 Jan 2013 09:09 by ADMIN
Work Around:
1. Create custom text box editor.

        public class MyTextBoxEditor : RadTextBoxEditor
        {
            private bool isValueChanging = false;
            private int selectionStart = -1;

            public MyTextBoxEditor()
         
Completed
Last Updated: 20 Feb 2014 15:09 by ADMIN
FIX. RadGridView - cursor does not work properly, when cursor has value "Cursors.SizeWE" and mouse is moving over GroupPanelElement.

Steps to reproduce:
1. On a gridview make sure that a column in grouped.
2. Place your mouse on a column split just below the grouped column.
3. The cursor icon changes to a SizeWE icon to let you know that you can resize the column, This is normal.
4. Now, move the mouse (with the cursor icon = SizeWE) to the grouped column just above.
5. Now the cusor gets stucked with this SizeWE icon and never goes away on this grid. Wathever you do now the icon stays showing as a SizeWE icon.

Work Around - create custom grid behavior and override OnMouseMove method.

    public class CustomGridBehavior : BaseGridBehavior 
    {
        public override bool OnMouseMove(MouseEventArgs e)
        {
             base.OnMouseMove(e);

             GridTableElement table = this.GetGridTableElementAtPoint(e.Location);

             if (table == null)
             {
                 this.GridViewElement.ElementTree.Control.Cursor = Cursors.Default;
                 return false;
             }

             return false;
        }
    }
Completed
Last Updated: 01 Jun 2015 07:09 by ADMIN
RadGridView - You cannot select cells only from Pinned Columns if under them there is unpinned one.

Steps to reproduce:
1. Set SelectionMode property of RadGridView to GridViewSelectionMode.CellSelect.
2. Create 3 left pinned columns
3. Create several unpinned columns.
4. Scroll horizontal scroll bar to hide several unpinned columns under the pinned.
5. Try to select only pinned cells with the selection rectangle.
Completed
Last Updated: 27 May 2015 08:07 by ADMIN
RadGridView - current row changes even when canceling the RowValidating event.

Code to reproduce:
            public Form1()
            {
                InitializeComponent();

                radGridView1.AutoGenerateColumns = false;
                radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;

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

                radGridView1.Rows.Add("A", "AA", "AAA");
                radGridView1.Rows.Add("B", "BB", "BBB");
                radGridView1.Rows.Add("C", "CC", "CCC");
                radGridView1.Rows.Add("D", "DD", "DDD");
                radGridView1.Rows.Add("E", "EE", "EEE");
                radGridView1.Rows.Add("F", "FF", "FFF");
                radGridView1.Rows.Add("G", "GG", "GGG");

                radGridView1.RowValidating += new RowValidatingEventHandler(radGridView1_RowValidating);

            }

            void radGridView1_RowValidating(object sender, RowValidatingEventArgs e)
            {
                if (e.Row.Cells["B"].Value.ToString() == "BB")
                {
                    e.Cancel = true;
                }
            }


Steps to reproduce: 

1. Go to cell with value "BB"
2. NOT in edit mode press down arrow key 2-3 times
3. Change text to "AA"
4. Press Tab several times

Work around: 
Use custom navigator:

radGridView1.GridViewElement.Navigator = new MyGridNavigator();


            public class MyGridNavigator : BaseGridNavigator
            {
                private static readonly FieldInfo EnumeratorFieldInfo = typeof(BaseGridNavigator).GetField("enumerator", BindingFlags.NonPublic | BindingFlags.Instance);

                protected GridTraverser enumerator
                {
                    get { return EnumeratorFieldInfo.GetValue(this) as GridTraverser; }
                }

                protected override bool SelectCore(GridViewRowInfo row, GridViewColumn column)
                {
                    bool result = base.SelectCore(row, column);

                    if (!result)
                    {
                        enumerator.GoToRow(this.GridViewElement.CurrentRow);
                    }

                    return result;
                }
            }
Completed
Last Updated: 17 Jun 2015 16:07 by Svetlin
Completed
Last Updated: 11 Feb 2014 13:53 by ADMIN
You should use the ticket project in order to reproduce the issue.
Completed
Last Updated: 31 Mar 2014 09:22 by Jesse Dyck
To reproduce: 
-add RadGridView with 2 columns - ID and Name; 
-add RadButton and use the following code:
public Form1() { InitializeComponent(); AddSelfReferencingColumns(grid, "Id", "Parent.Id"); this.grid.DataSource = TestDataGenerator.GenerateTestData(); } public void AddSelfReferencingColumns(RadGridView grid, string childKey, string parentKey) { GridViewTextBoxColumn col1 = new GridViewTextBoxColumn("hiddenColumnId", childKey); GridViewTextBoxColumn col2 = new GridViewTextBoxColumn("hiddenColumnParentId", parentKey); grid.MasterTemplate.Columns.Add(col1); grid.MasterTemplate.Columns.Add(col2); grid.Columns["hiddenColumnId"].IsVisible = false; grid.Columns["hiddenColumnParentId"].IsVisible = false; grid.Relations.AddSelfReference(grid.MasterTemplate, "hiddenColumnId", "hiddenColumnParentId"); } void refreshButton_Click(object sender, System.EventArgs e) { this.grid.DataSource = TestDataGenerator.GenerateTestData(); } class TestDataGenerator { public static IList<TestObject> GenerateTestData() { IList<TestObject> result = new List<TestObject>(); TestObject top = new TestObject { Id = 1, Name = "Top" }; result.Add(top); for (int i = 1; i < 4; i++) { TestObject firstChild = new TestObject() { Id = 10 * i, Name = string.Format("First level child {0}", i), Parent = top }; result.Add(firstChild); for (int j = 1; j < 10; j++) { TestObject secondChild = new TestObject() { Id = 10 * i + j, Name = string.Format("Second level child {0}", j), Parent = firstChild }; result.Add(secondChild); } } return result; } } class TestObject { public long Id { get; set; } public string Name { get; set; } public TestObject Parent { get; set; } }

Steps to reproduce: 1.Type in Name column filter i.e. "F" 2.Press refresh button. The grid is empty, even though the new list contains the same data (different objects).

Workaround: void refreshButton_Click(object sender, System.EventArgs e) { FilterDescriptorCollection filters = new FilterDescriptorCollection(); foreach (FilterDescriptor filterItem in this.grid.FilterDescriptors) { filters.Add(filterItem); } this.grid.DataSource = TestDataGenerator.GenerateTestData(); this.grid.FilterDescriptors.Clear(); foreach (FilterDescriptor filter in filters) { this.grid.FilterDescriptors.Add(filter); } }
Completed
Last Updated: 11 Feb 2014 15:57 by ADMIN
FIX. RadGridView - the PropertyName from the arguments of the RowsChanged event is null, while it should display the changed field name
Completed
Last Updated: 25 Apr 2013 02:13 by ADMIN
To reproduce, use the following localization provider and set a fitler to a boolean column in RadGridView, via the Custom filtering dialog.

  class MyRadGridLocalizationProvider : RadGridLocalizationProvider
        {
            public const string CustomTrue = "CustomTRUE";
            public const string CustomFalse = "CustomFALSE";

            public override string GetLocalizedString(string id)
            {
                if (id == "CustomFilterDialogTrue")
                {
                    return CustomTrue;
                }
                else if (id == "CustomFilterDialogFalse")
                {
                    return CustomFalse;
                }
                else
                {
                    return base.GetLocalizedString(id);
                }
            }
        }

Workaround - create custom type converter as follows:
        public class MyBooleanConverter : BooleanConverter
        {
            public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
            {
                if (value is string)
                {
                    string text = Convert.ToString(value);

                    if (text == MyRadGridLocalizationProvider.CustomTrue)
                    {
                        return true;
                    }
                    else if (text == MyRadGridLocalizationProvider.CustomFalse)
                    {
                        return false;
                    }
                }
                return base.ConvertFrom(context, culture, value);
            }
        }

and apply it to the check box column:
   radGridView1.Columns["BoolColumn"].DataTypeConverter = new MyBooleanConverter();
Completed
Last Updated: 25 Jul 2014 07:53 by ADMIN
To reproduce set AddNewRowPosition is Bottom and the NewRowEnterKeyMode is EnterMovesToNextCell and add a new row via na UI

Workaround:
        void radGridView1_RowsChanged(object sender, GridViewCollectionChangedEventArgs e)
        {
            if (e.Action == NotifyCollectionChangedAction.Add && radGridView1.CurrentRow is GridViewNewRowInfo)
            {

            }
        }
Completed
Last Updated: 21 May 2015 09:40 by ADMIN
debug attached sample application

steps:

set number of rows to 500
change to 2nd page
change to 1st page
set number of rows to 0
change to 2nd page
Completed
Last Updated: 27 May 2015 06:51 by ADMIN
1. Create a new project with RadGridView and set MultiSelect to true and SelectionMode to CellSelect.
2. Run the project.
3. Use the mouse to select some cells and scroll down while selecting.
4. Remove some cells from the selection.
5. Scroll with the scrollbar up to the first selected cells. You will see that all previously selected cells which are not visible are not selected.

Workaround:
Use the following custom behavior:
public class MyGridRowBehavior : GridDataRowBehavior
{
    private FieldInfo oldCurrentLocationFieldInfo;
    private Point oldCurrentLocation
    {
        get
        {
            if (this.oldCurrentLocationFieldInfo == null)
            {
                this.oldCurrentLocationFieldInfo = typeof(GridRowBehavior).GetField("oldCurrentLocation", BindingFlags.Instance | BindingFlags.NonPublic);
            }

            return (Point)this.oldCurrentLocationFieldInfo.GetValue(this);
        }
        set
        {
            this.oldCurrentLocationFieldInfo.SetValue(this, value);
        }
    }

    private MethodInfo selectIntersectedCellsMethodInfo;
    private delegate void SelectIntersectedCellsDelegate(RadElementCollection rows, bool isProcessedShiftOrControl);
    private SelectIntersectedCellsDelegate SelectIntersectedCellsCore;
    private void SelectIntersectedCells(RadElementCollection rows, bool isProcessedShiftOrControl)
    {
        if (this.selectIntersectedCellsMethodInfo == null)
        {
            this.selectIntersectedCellsMethodInfo = typeof(GridRowBehavior).GetMethods(BindingFlags.Instance | BindingFlags.NonPublic).First(x => x.Name == "SelectIntersectedCells" && x.GetParameters().Length == 2);
            this.SelectIntersectedCellsCore = (SelectIntersectedCellsDelegate)Delegate.CreateDelegate(typeof(SelectIntersectedCellsDelegate), this, this.selectIntersectedCellsMethodInfo);
        }

        this.SelectIntersectedCellsCore(rows, isProcessedShiftOrControl);
    }

    private MethodInfo selectIntersectedRowsMethodInfo;
    private delegate bool SelectIntersectedRowsDelegate(RadElementCollection rows);
    private SelectIntersectedRowsDelegate SelectIntersectedRowsCore;
    private bool SelectIntersectedRows(RadElementCollection rows)
    {
        if (this.selectIntersectedRowsMethodInfo == null)
        {
            this.selectIntersectedRowsMethodInfo = typeof(GridRowBehavior).GetMethod("SelectIntersectedRows", BindingFlags.Instance | BindingFlags.NonPublic);
            this.SelectIntersectedRowsCore = (SelectIntersectedRowsDelegate)Delegate.CreateDelegate(typeof(SelectIntersectedRowsDelegate), this, this.selectIntersectedRowsMethodInfo);
        }

        return this.SelectIntersectedRowsCore(rows);
    }

    protected override bool ProcessMouseSelection(Point mousePosition, GridCellElement currentCell)
    {
        if (this.RootGridBehavior.LockedBehavior != this)
        {
            this.GridControl.Capture = true;
            this.RootGridBehavior.LockBehavior(this);
        }

        GridCellElement mouseDownCell = this.GetCellAtPoint(this.MouseDownLocation);
        GridCellElement oldCurrentCell = this.GetCellAtPoint(this.oldCurrentLocation);

        bool isValidResizingContext = this.ResizeSelectionRectangle(currentCell, mousePosition);
        bool result = false;

        if (isValidResizingContext && oldCurrentCell != currentCell)
        {
            if (this.MasterTemplate.MultiSelect && !this.GridViewElement.Template.AllowRowReorder)
            {
                if (this.MasterTemplate.SelectionMode == GridViewSelectionMode.FullRowSelect)
                {
                    bool selectedRowsChanged = false;
                    bool isPressedShiftOrControl = (this.IsPressedShift || this.IsPressedControl);

                    GridTableElement tableElement = this.GridViewElement.CurrentView as GridTableElement;
                    RadElementCollection scrollableRows = tableElement.ViewElement.ScrollableRows.Children;
                    RadElementCollection topPinnedRows = tableElement.ViewElement.TopPinnedRows.Children;
                    RadElementCollection bottomPinnedRows = tableElement.ViewElement.BottomPinnedRows.Children;
                    GridViewRowInfo[] selectedRows = this.MasterTemplate.SelectedRows.ToArray();

                    tableElement.BeginUpdate();

                    int oldSelectedRows = this.MasterTemplate.SelectedRows.Count;

                    if (!isPressedShiftOrControl)
                    {
                        for (int i = selectedRows.Length - 1; i >= 0; i--)
                        {
                            GridViewRowInfo rowInfo = selectedRows[i];
                            GridRowElement rowElement = tableElement.GetRowElement(rowInfo);

                            bool select = rowElement != null &&
                                                 rowElement.ControlBoundingRectangle.IntersectsWith(this.GridViewElement.SelectionRectangle);

                            if (select)
                            {
                                rowInfo.IsSelected = true;
                            }

                            if (!rowInfo.IsSelected)
                            {
                                selectedRowsChanged = true;
                            }
                        }
                    }

                    selectedRowsChanged = this.SelectIntersectedRows(topPinnedRows);
                    selectedRowsChanged |= this.SelectIntersectedRows(scrollableRows);
                    selectedRowsChanged |= this.SelectIntersectedRows(bottomPinnedRows);

                    if (oldSelectedRows != this.MasterTemplate.SelectedRows.Count)
                    {
                        selectedRowsChanged = true;
                    }

                    tableElement.EndUpdate(false);
                }
                else
                {
                    GridTableElement tableElement = this.GridViewElement.CurrentView as GridTableElement;

                    if (tableElement == null)
                    {
                        return result;
                    }

                    CancelEventArgs cancelArgs = new CancelEventArgs();
                    this.MasterTemplate.EventDispatcher.RaiseEvent<CancelEventArgs>(EventDispatcher.SelectionChanging, this, cancelArgs);
                    if (cancelArgs.Cancel)
                    {
                        return result;
                    }
                    
                    //Since version Q2 2014 (version 2014.2.617), please use:
                    //GridViewSelectionCancelEventArgs cancelArgs = new GridViewSelectionCancelEventArgs(this.MasterTemplate.CurrentRow, this.MasterTemplate.CurrentColumn);
                    //this.MasterTemplate.EventDispatcher.RaiseEvent<GridViewSelectionCancelEventArgs>(EventDispatcher.SelectionChanging, this, cancelArgs);
                    //if (cancelArgs.Cancel)
                    //{
                    //    return result;
                    //}

                    this.GridViewElement.CurrentView.BeginUpdate();
                    bool isProcessedShiftOrControl = (this.IsPressedShift || this.IsPressedControl);

                    int count = this.MasterTemplate.SelectedCells.Count;
                    RadElementCollection scrollableRows = tableElement.ViewElement.ScrollableRows.Children;
                    RadElementCollection topPinnedRows = tableElement.ViewElement.TopPinnedRows.Children;
                    RadElementCollection bottomPinnedRows = tableElement.ViewElement.BottomPinnedRows.Children;

                    this.SelectIntersectedCells(scrollableRows, isProcessedShiftOrControl);
                    this.SelectIntersectedCells(topPinnedRows, isProcessedShiftOrControl);
                    this.SelectIntersectedCells(bottomPinnedRows, isProcessedShiftOrControl);

                    bool notifyUpdates = true;

                    if (isProcessedShiftOrControl)
                    {
                        notifyUpdates = count != this.MasterTemplate.SelectedCells.Count;
                    }

                    this.GridViewElement.CurrentView.EndUpdate(false);

                    this.GridViewElement.Invalidate();
                }

                result = true;
            }

            result = false;
        }

        this.oldCurrentLocation = mousePosition;
        return result;
    }
}


Register the new behavior as follows:

BaseGridBehavior behavior = (BaseGridBehavior)this.radGridView1.GridBehavior;
behavior.UnregisterBehavior(typeof(GridViewDataRowInfo));
behavior.RegisterBehavior(typeof(GridViewDataRowInfo), new MyGridRowBehavior());
Completed
Last Updated: 23 Apr 2014 12:56 by ADMIN
The GroupRow Height cannot be changed when ColumnGroupsViewDefinition and HtmlViewDefinition are used.
Completed
Last Updated: 07 Mar 2014 07:24 by ADMIN
The row's MaxHeight property does not affect the row sizing when the AutoSizeRows property of RadGridView is enabled.

Workaround:
Use the following data row:

public class MyGridDataRowElement : GridDataRowElement
{
protected override Type ThemeEffectiveType
{
get
{
return typeof(GridDataRowElement);
}
}
protected override System.Drawing.SizeF MeasureCore(System.Drawing.SizeF availableSize)
{
float maxHeight = this.RowInfo.MaxHeight;
bool isAutoSize = this.GridViewElement.AutoSize && this.RowInfo.MaxHeight > 0 && availableSize.Height == float.PositiveInfinity;
SizeF size = base.MeasureCore(availableSize);

if (isAutoSize && size.Height > maxHeight)
{
availableSize.Height = maxHeight;
size = base.MeasureCore(availableSize);
}

return size;
}
}

here is how to replace it and set the max height:
void radGridView1_RowFormatting(object sender, RowFormattingEventArgs e)
{
e.RowElement.RowInfo.MaxHeight = 32;
}

void radGridView1_CreateRow(object sender, GridViewCreateRowEventArgs e)
{
if (e.RowType == typeof(GridDataRowElement))
{
e.RowType = typeof(MyGridDataRowElement);
}
}
Completed
Last Updated: 10 Sep 2015 13:14 by Jesse Dyck
The performance of excel-like filtering when you have more than 5000+ row in RadGridView.
Completed
Last Updated: 21 May 2015 09:19 by ADMIN
If you set the MinWidth and MaxWidth to a column and then set AutoSizeColumnMode to Fill (all this in the form constructor) a gap will appear between the columns.

Workaround: set the Fill before the MinWidth and MaxWidth and to do all these operations on Load.
Completed
Last Updated: 02 Jan 2013 03:08 by ADMIN
Steps to reproduce:
1. Use the RadGridView Smart Tag to set its data source 
2. Press "Add Project DataSource"
3. Select "Object"
4. Drill down and select the class you created. (see below)
5. Select the New Data Source
6. Run the project 

Code to reproduce:

public class TestClass
{
public enum Month { January, Febuary, March, April, May, June, July, August, September, October, November, December }
public Month TestMonth {get; set;}
public String TestMessage {get; set;}
public TestClass(Month month, String message)
{
TestMonth = month; TestMessage = message; }
}

Workaround:
Use BindingList instead System.Windows.Forms.BindingSource.
Completed
Last Updated: 26 Nov 2015 13:13 by ADMIN
After a couple clicks, grid's context menu becomes unresponsive when using RadGridView through remote connection and Windows 7
Completed
Last Updated: 05 Sep 2012 14:31 by Jesse Dyck
The column image setting overrides the local image setting. 

Work around:
void grid_CellFormatting(object sender, CellFormattingEventArgs e)
       {
           if (e.CellElement is GridCommandCellElement)
           {
               if (e.Column.Name == "stationview")
               {
                   RadButtonElement element = (RadButtonElement)e.CellElement.Children[0];
                   element.UnbindProperty(RadButtonElement.ImageProperty);
                   element.Image = img;
                   element.DisplayStyle = DisplayStyle.Image;
                   element.ImageAlignment = ContentAlignment.MiddleCenter;
               }
           }
       }
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);
    }
}