Completed
Last Updated: 26 Jan 2017 10:31 by ADMIN
Please refer to the attached sample project. Activate the editor for the "Notes" column of the first row, don't perform any changes and click another row. You will notice that the  DataRow.RowState is Modified although no change is performed. If you perform the same actions with a MS DataGridView, the RowState is not Modified.

Note: the GridViewRowInfo.IsModified property in the CellEndEdit is also set to true without modifying the cell's value. 

Workaround: handle the CellBeginEdit and CellEndEdit events and compare the values before and after the edit operation:

object initialValue = null;

private void radGridView1_CellBeginEdit(object sender, GridViewCellCancelEventArgs e)
{
    initialValue = e.Row.Cells[e.ColumnIndex].Value;
}

private void radGridView1_CellEndEdit(object sender, GridViewCellEventArgs e)
{
    if (initialValue != e.Value)
    {
        Console.WriteLine("modified");
    }
    else
    {
        Console.WriteLine("NOT modified");
    }
}
Unplanned
Last Updated: 17 Aug 2016 08:29 by ADMIN
Create a DataTable with columns Column1, Column2, Column3, Column4, Column5, and bound to RadGridView. Create a second DataTable with columns Column1, Column2a, Column3, Column4, Column5, and re-bind the RadGridView to this DataTable. Instead of the columns appearing in the same order as they are in the second DataTable, they show up as Column1, Column3, Column4, Column5, Column2a in the RadGridView. 
Completed
Last Updated: 26 Sep 2016 07:34 by ADMIN
To reproduce:

public Form1()
{
    InitializeComponent();

    GridViewComboBoxColumn comboCol = new GridViewComboBoxColumn();         
    comboCol.DataSource = InitComboActive();
    comboCol.ValueMember = "ActiveCode";
    comboCol.DisplayMember = "ActiveDsc";
    comboCol.FieldName = "ActiveCode";

    this.radGridView1.Columns.Add(comboCol);

    this.radGridView1.AutoGenerateColumns = false;
    BindRadGrid();
    this.radGridView1.CellValueChanged += radGridView1_CellValueChanged;
}

private void radGridView1_CellValueChanged(object sender, GridViewCellEventArgs e)
{
    BindRadGrid();
}

private void BindRadGrid()
{
    this.radGridView1.DataSource = null;
    this.radGridView1.DataSource = InitComboData();
}

private DataTable InitComboActive()
{
    DataTable dt = new DataTable("DtActive");
    dt.Columns.Add("ActiveCode");
    dt.Columns.Add("ActiveDsc");

    dt.Rows.Add("0", "InActive");
    dt.Rows.Add("1", "Active");

    return dt;
}

private DataTable InitComboData()
{
    DataTable dt = new DataTable("DtData");
    dt.Columns.Add("Host");
    dt.Columns.Add("ActiveCode");
    dt.Columns.Add("ActiveDsc");
    
    dt.Rows.Add("Host A", "0", "InActive");
    dt.Rows.Add("Host B", "1", "Active");

    return dt;
}

Workaround: use the RadGridView.CellEndEdit instead for rebinding. 
Workaround 2: use the CellValidated event:
private void radGridView1_CellValidated(object sender, CellValidatedEventArgs e)
{
    if (e.Row is GridViewDataRowInfo)
    {
        BindRadGrid();
    }
}

Completed
Last Updated: 12 Oct 2016 08:35 by ADMIN
To reproduce:

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

    for (int i = 0; i < 50; i++)
    {
        DataRow dr = dt.NewRow();
        foreach (DataColumn col in dt.Columns)
        {
            dr[col.ColumnName] = "Data." + i + "." + dt.Columns.IndexOf(col);
        }
        dt.Rows.Add(dr);
    }

    this.radGridView1.DataSource = dt;
    this.radGridView1.MasterTemplate.EnablePaging = true;
    this.radGridView1.MasterTemplate.ShowGroupedColumns = true;
}

public void ExportContactToExcelFile(string strFileName)
{
    GridViewSpreadExport spreadExporter = new GridViewSpreadExport(this.radGridView1);
    SpreadExportRenderer exportRenderer = new SpreadExportRenderer();
       
    spreadExporter.PagingExportOption = PagingExportOption.AllPages;
    spreadExporter.ExportVisualSettings = true;
    spreadExporter.SheetName = "Contacts";
    spreadExporter.RunExport(strFileName, exportRenderer);
}

private void radButton1_Click(object sender, EventArgs e)
{
    ExportContactToExcelFile(@"..\..\Export" + DateTime.Now.ToLongTimeString().Replace(":", "_") + ".xlsx");
}
 
Workaround: refresh the MasterTemplate after the export:

private void radButton1_Click(object sender, EventArgs e)
{
    ExportContactToExcelFile(@"..\..\Export" + DateTime.Now.ToLongTimeString().Replace(":", "_") + ".xlsx");
    this.radGridView1.MasterTemplate.Refresh();
}
Declined
Last Updated: 19 Aug 2016 11:44 by ADMIN
When you set a RadGridView's SelectionMode to GridViewSelectionMode.CellSelect and then you highlight full rows by using the row header, the SelectedRows collection is empty.  Telerik support informed me this is "as expected" and that I should use "SelectedCells" collection when using the CellSelect Mode.  While this is a decent workaround I don't see why SelectedRows collection can't be filled when the entire row is actually highlighted.  
Completed
Last Updated: 20 Sep 2016 06:41 by ADMIN
To reproduce:

 public RadForm1()
 {
     InitializeComponent();
     
     DataTable master = new DataTable();
     master.Columns.Add("ID", typeof(int));
     master.Columns.Add("test", typeof(string));
     
     for (int i = 0; i < 500; i++)
     {
         master.Rows.Add(i, "Row " + i);
     }

     radGridView1.DataSource = master;

     radLabel1.Text = "RadGridView: AutoSizeRows = " + ((radGridView1.AutoSizeRows) ? "True" : "False");
 }

 private void radButton1_Click(object sender, EventArgs e)
 {
     radGridView1.TableElement.ScrollToRow(radGridView1.MasterTemplate.Rows[200]);
 }

 private void radButton2_Click(object sender, EventArgs e)
 {
     radGridView1.AutoSizeRows = !radGridView1.AutoSizeRows;

     radLabel1.Text = "RadGridView: AutoSizeRows = " + ((radGridView1.AutoSizeRows) ? "True" : "False");
 }


Workaround:

this.radGridView1.ViewDefinition = new CustomTableViewDefinition();


        public class CustomTableViewDefinition : TableViewDefinition
        {
            public override IRowView CreateViewUIElement(GridViewInfo viewInfo)
            {
                return new CustomGridTableElement();
            }
        }

        public class CustomGridTableElement : GridTableElement
        {
              protected override Type ThemeEffectiveType     
                 { 
                    get    
                              { 
                                     return typeof(GridTableElement);     
                               }
                   }
            public override void ScrollToRow(GridViewRowInfo rowInfo)
            {
                if (rowInfo == null || rowInfo.IsPinned || !rowInfo.IsVisible || rowInfo is GridViewDetailsRowInfo)
                {
                    return;
                }

                this.ViewElement.InvalidateMeasure();
                this.ViewElement.UpdateLayout();

                if (GridViewElement.AutoSizeRows || (ViewTemplate.Templates.Count > 0 && rowInfo.ViewTemplate.Parent != null))
                {
                    ScrollToRowCore(rowInfo, false);

                    return;
                }

                this.RowScroller.ScrollToItem(rowInfo, false);
                this.UpdateLayout();
            }

            private void ScrollToRowCore(GridViewRowInfo rowInfo, bool ensureVisible)
            {
                if (!this.GridViewElement.UseScrollbarsInHierarchy && this.ViewInfo.ParentRow != null)
                {
                    if (ensureVisible)
                    {
                        this.GridViewElement.TableElement.EnsureRowVisible(rowInfo);
                    }
                    else
                    {
                        this.GridViewElement.TableElement.ScrollToRow(rowInfo);
                    }
                    return;
                }

                if (!this.IsInValidState(true) || this.VScrollBar.LargeChange == 0)
                {
                    return;
                }

                RadControl control = this.ElementTree.Control as RadControl;
                if (control != null)
                {
                    control.SuspendUpdate();
                }

                int oldValue = this.VScrollBar.Value;
                GridRowElement rowElement = GetChildRowElement(rowInfo);
                
                if (rowElement == null && this.PageViewMode == PageViewMode.ExplorerBar)
                {
                    if (control != null)
                    {
                        control.ResumeUpdate();
                    }

                    return;
                }

                while (this.VScrollBar.Value < this.VScrollBar.Maximum)
                {
                    if (rowElement == null)
                    {
                        rowElement = GetChildRowElement(rowInfo);
                    }
                    if (rowElement != null)
                    {
                        ScrollToPartiallyVisibleRow(rowElement, ensureVisible);
                        break;
                    }
                    else
                    {
                        bool scrollRangeChanged = SetScrollValue(this.VScrollBar, this.VScrollBar.Value + this.VScrollBar.SmallChange);
                        if (this.VScrollBar.Value >= this.VScrollBar.Maximum - this.VScrollBar.LargeChange + 1 && !scrollRangeChanged)
                        {
                            SetScrollValue(this.VScrollBar, oldValue);
                            break;
                        }
                    }
                }

                if (oldValue == this.VScrollBar.Minimum || rowElement != null)
                {
                    if (control != null)
                    {
                        control.ResumeUpdate();
                    }
                    return;
                }

                SetScrollValue(this.VScrollBar, 0);

                while (this.VScrollBar.Value < oldValue)
                {
                    if (rowElement == null)
                    {
                        rowElement = GetChildRowElement(rowInfo);
                    }
                    if (rowElement != null)
                    {
                        ScrollToPartiallyVisibleRow(rowElement, ensureVisible);
                        break;
                    }
                    else
                    {
                        bool scrollRangeChanged = SetScrollValue(this.VScrollBar, this.VScrollBar.Value + this.VScrollBar.SmallChange);
                        if (this.VScrollBar.Value >= this.VScrollBar.Maximum - this.VScrollBar.LargeChange + 1 && !scrollRangeChanged)
                        {
                            SetScrollValue(this.VScrollBar, oldValue);
                            break;
                        }
                    }
                }

                if (control != null)
                {
                    control.ResumeUpdate();
                }
            }

            private GridRowElement GetChildRowElement(GridViewRowInfo rowInfo)
            {
                if (rowInfo.ViewInfo == this.ViewInfo)
                {
                    return GetRowElement(rowInfo);
                }
                else
                {
                    GridTableElement tableElement = GridViewElement.GetRowView(rowInfo.ViewInfo) as GridTableElement;
                    if (tableElement != null)
                    {
                        return tableElement.GetRowElement(rowInfo);
                    }
                }
                return null;
            }

            private void ScrollToPartiallyVisibleRow(GridRowElement rowElement, bool ensureVisible)
            {
                int delta = 0;

                while ((rowElement.ControlBoundingRectangle.Y < ViewElement.ScrollableRows.ControlBoundingRectangle.Y &&
                        rowElement.ControlBoundingRectangle.Bottom > ViewElement.ScrollableRows.ControlBoundingRectangle.Y) ||
                       (rowElement.ControlBoundingRectangle.Y < ViewElement.ScrollableRows.ControlBoundingRectangle.Bottom &&
                        rowElement.ControlBoundingRectangle.Bottom > ViewElement.ScrollableRows.ControlBoundingRectangle.Bottom))
                {
                    if (rowElement.ControlBoundingRectangle.Y < ViewElement.ScrollableRows.ControlBoundingRectangle.Y &&
                        rowElement.ControlBoundingRectangle.Bottom > ViewElement.ScrollableRows.ControlBoundingRectangle.Y)
                    {
                        delta = ViewElement.ScrollableRows.ControlBoundingRectangle.Y - rowElement.ControlBoundingRectangle.Y;
                        SetScrollValue(this.VScrollBar, this.VScrollBar.Value - delta);

                        return;
                    }

                    if (rowElement.ControlBoundingRectangle.Y < ViewElement.ScrollableRows.ControlBoundingRectangle.Bottom &&
                        rowElement.ControlBoundingRectangle.Bottom > ViewElement.ScrollableRows.ControlBoundingRectangle.Bottom)
                    {
                        delta = rowElement.ControlBoundingRectangle.Top - ViewElement.ScrollableRows.ControlBoundingRectangle.Top;
                        SetScrollValue(this.VScrollBar, this.VScrollBar.Value + delta);

                        return;
                    }

                    if (ensureVisible)
                    {
                        delta = rowElement.ControlBoundingRectangle.Bottom - ViewElement.ScrollableRows.ControlBoundingRectangle.Bottom;

                        if (delta < 0)
                        {
                            break;
                        }
                    }
                    else
                    {
                        delta = rowElement.ControlBoundingRectangle.Y - ViewElement.ScrollableRows.ControlBoundingRectangle.Y;

                        if (delta < 0)
                        {
                            delta = 0;
                        }
                    }

                    bool scrollRangeChanged = SetScrollValue(this.VScrollBar, this.VScrollBar.Value + delta);

                    if (this.VScrollBar.Value >= this.VScrollBar.Maximum - this.VScrollBar.LargeChange + 1 || !scrollRangeChanged)
                    {
                        break;
                    }
                }
            }
            
            private bool SetScrollValue(RadScrollBarElement scrollbar, int newValue)
            {
                int max = this.VScrollBar.Maximum;

                if (newValue > scrollbar.Maximum - scrollbar.LargeChange + 1)
                {
                    newValue = scrollbar.Maximum - scrollbar.LargeChange + 1;
                }

                if (newValue < scrollbar.Minimum)
                {
                    newValue = scrollbar.Minimum;
                }

                scrollbar.Value = newValue;
                this.UpdateLayout();

                return max != this.VScrollBar.Maximum;
            }
        }
  
Unplanned
Last Updated: 05 Aug 2016 09:07 by ADMIN
To reproduce:

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

     Me.RadGridView1.DataSource = Me.CategoriesBindingSource

     Dim viewDef As New ColumnGroupsViewDefinition
     Dim group1 = New GridViewColumnGroup()
     Dim row1 = New GridViewColumnGroupRow
     group1.Rows.Add(row1)
     row1.ColumnNames.Add("CategoryID")
     row1.ColumnNames.Add("CategoryName")
     viewDef.ColumnGroups.Add(group1)

     Dim group2 = New GridViewColumnGroup()
     Dim row2 = New GridViewColumnGroupRow
     group2.Rows.Add(row2)
     row2.ColumnNames.Add("Description")
     row2.ColumnNames.Add("Picture")
     viewDef.ColumnGroups.Add(group2)

     Me.RadGridView1.ViewDefinition = viewDef
 End Sub

 Private Sub RadButton1_Click(sender As Object, e As EventArgs) Handles RadButton1.Click
     Console.WriteLine("BEFORE >>")
     For Each col As GridViewColumn In Me.RadGridView1.Columns
         Console.WriteLine(col.Name & " >> " & col.Width )
     Next

     Dim style As New GridPrintStyle()
     style.FitWidthMode = PrintFitWidthMode.FitPageWidth
     Me.RadGridView1.PrintStyle = style
     Me.RadGridView1.PrintPreview()

     Console.WriteLine("AFTER >>")
     For Each col As GridViewColumn In Me.RadGridView1.Columns
         Console.WriteLine(col.Name & " >> " & col.Width)
     Next
 End Sub

IMPORTANT: If you resize one of the columns at run time before calling the PrintPreview method, the columns' width is restored. In addition, if you call the PrintPreview method without resizing the columns before that, close the dialog and hide one of the columns by using the default context menu, the columns' width for the visible columns is enlarged.

Workaround: you can get the columns width by using the ColumnGroupRowLayout:

Dim rowLayout As ColumnGroupRowLayout = TryCast(Me.RadGridView1.TableElement.ViewElement.RowLayout, ColumnGroupRowLayout)
 
For Each col As GridViewColumn In Me.RadGridView1.Columns
    Dim info As ColumnGroupsCellArrangeInfo = rowLayout.GetColumnData(col)
    Debug.WriteLine(col.Name & " >> " & info.Bounds.Width)
Next
Completed
Last Updated: 05 Dec 2016 12:19 by ADMIN
Please refer to the attached sample project and gif files. The user is not allowed to drop in the first half of the row element. However, the drop operation is allowed in the second half. Once the RadDragOverEventArgs.CanDrop property is set to false, the before/after row hint is disposed and it is not shown for this row anymore.

Workaround: 

public class CustomRadGridViewDragDropService : RadGridViewDragDropService
{
    public CustomRadGridViewDragDropService(RadGridViewElement gridViewElement) : base(gridViewElement)
    {
    }

    public override string Name
    {
        get
        {
            return typeof(RadGridViewDragDropService).Name;
        }
    }

    protected override void OnPreviewDragOver(RadDragOverEventArgs e)
    {
        base.OnPreviewDragOver(e);
        SetDragDropBehavior();
        Point p = this.GridViewElement.ElementTree.Control.PointToClient(Cursor.Position);
        UpdateDragHintLocation(p);
    }
}


this.radGridView1.GridViewElement.RegisterService(new CustomRadGridViewDragDropService(this.radGridView1.GridViewElement));  
Completed
Last Updated: 14 Feb 2017 14:13 by ADMIN
To reproduce:

 private void Form1_Load(object sender, EventArgs e)
 { 
     this.productsTableAdapter.Fill(this.nwindDataSet.Products); 
     this.categoriesTableAdapter.Fill(this.nwindDataSet.Categories);

     this.radGridView1.AutoGenerateColumns = false;
     this.radGridView1.DataSource = this.productsBindingSource;
   
     GridViewComboBoxColumn col = new GridViewComboBoxColumn();
     col.DataSource = this.categoriesBindingSource;
     col.MinWidth = 200;
     col.DisplayMember = "Description";
     col.ValueMember = "CategoryID";
     this.radGridView1.Columns.Add(col);

     this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
     this.radGridView1.CellValueChanged += radGridView1_CellValueChanged;
 }

private void radGridView1_CellValueChanged(object sender, GridViewCellEventArgs e)
{
    string value = "{nothing}";

    if (e.Value != null)
    {
        value = Convert.ToString(e.Value);
    }
    RadMessageBox.Show("CellValueChanged. Value >> " + value);
}

Note: if the cell value is not null, the CellValueChanged event is not fired when the selection in drop down is not changed.
Additional scenario: if you use a RadMultiColumnComboBoxElement for this column replaced in the EditorRequired, the issue is reproducible again.
Completed
Last Updated: 04 Jan 2017 16:01 by ADMIN
The event should be used to cancel copying for a single cell or override the value to be copied to the Clipboard.
Completed
Last Updated: 28 Sep 2016 06:40 by ADMIN
To reproduce:

public Form1()
{
    InitializeComponent();
    List<Item> items = new List<Item>();
    for (int i = 0; i < 10; i++)
    {
        items.Add(new Item(i,"Item" + i,Color.Red));
    }
    this.radGridView1.DataSource = items;
    this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;
    this.radGridView1.CellValidating += radGridView1_CellValidating;
}

private void radGridView1_CellValidating(object sender, Telerik.WinControls.UI.CellValidatingEventArgs e)
{
    if (e.ActiveEditor != null && e.ActiveEditor is GridColorPickerEditor)
    {
        Color c = (Color)e.Value;
        if (c == Color.Red)
        {
            e.Cancel = true;
            Console.WriteLine("Red is not allowed!");
        }
    }
}

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

    public string Name { get; set; }

    public Color Color { get; set; }

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

Steps:
1. Activate the editor for the Color cell.
2. Leave the color as it
3. Press the Enter key. The CellValidating event is fired twice.

Note: it seems that when the color text is selected, the event is fired twice.

Completed
Last Updated: 02 Aug 2016 06:48 by ADMIN
How to reproduce:
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        this.radGridView1.DataSource = this.GetSampleData();
        this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
        this.radGridView1.EnableFiltering = true;
        this.radGridView1.ShowFilteringRow = false;
        this.radGridView1.ShowHeaderCellButtons = true;
    }

    private DataTable GetSampleData()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("Id", typeof(double));
        dt.Columns.Add("Name", typeof(string));
        dt.Columns.Add("IsValid", typeof(bool));
        dt.Columns.Add("Date", typeof(DateTime));

        for (int i = 0; i < 115; i++)
        {
            dt.Rows.Add(((double)i * 5 / 7) * 3, "Name " + i, i % 2 == 0, DateTime.Now.AddDays(i));
        }

        return dt;
    }
}

Workaround specify decimal as the type of the column in the DataTable object or clone the DataTAble object and change the type of the column:
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        DataTable dt = this.GetSampleData();
        DataTable dtCloned = dt.Clone();
        dtCloned.Columns[0].DataType = typeof(decimal);
        foreach (DataRow row in dt.Rows)
        {
            dtCloned.ImportRow(row);
        }

        this.radGridView1.DataSource = dtCloned;
        this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
        this.radGridView1.EnableFiltering = true;
        this.radGridView1.ShowFilteringRow = false;
        this.radGridView1.ShowHeaderCellButtons = true;
    }

    private DataTable GetSampleData()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("Id", typeof(double));
        dt.Columns.Add("Name", typeof(string));
        dt.Columns.Add("IsValid", typeof(bool));
        dt.Columns.Add("Date", typeof(DateTime));

        for (int i = 0; i < 115; i++)
        {
            dt.Rows.Add(((double)i * 5 / 7) * 3, "Name " + i, i % 2 == 0, DateTime.Now.AddDays(i));
        }

        return dt;
    }
}

Unplanned
Last Updated: 05 Aug 2016 07:56 by ADMIN
To reproduce:
- Add DateTime column and set the RowHeight to 20.
- Set the theme to Windows7.
- The text is not visible when the editor is shown.

Workaround:
private void RadGridView2_CellEditorInitialized(object sender, GridViewCellEventArgs e)
{
    RadDateTimeEditor editor = e.ActiveEditor as RadDateTimeEditor;
    if (editor != null)
    {
        var element = editor.EditorElement as RadDateTimeEditorElement;
        element.Font = new Font("Segoe UI", 8, FontStyle.Regular);
        element.Children[1].Visibility = ElementVisibility.Collapsed;
        element.TextBoxElement.ShowBorder = false;        
        element.TextBoxElement.TextBoxItem.HostedControl.MinimumSize = new Size(0, 12);
    }
}
Completed
Last Updated: 09 Aug 2016 06:49 by ADMIN
Steps to reproduce:
- create a winforms project
- create form (normal windows form, not telerik form)
- create radgridview from toolbox
- right click and open property builder
- select mastertemplate
- set viewdefinition = columngroups view
- add 3-4 columns (textbox, combobox, etc...)
- click ok button at the property builder
- right click on the radgridview and open the property builder
- rename the name and the header text of the first column
- click ok button at the property builder
Declined
Last Updated: 04 Jul 2016 09:26 by ADMIN
To reproduce: use the following code snippet and enter in the filter row one of the row values as it is shown in the screenshot:

this.radGridView1.EnableFiltering = true;
GridViewDateTimeColumn dateTimeColumn = new GridViewDateTimeColumn("DateTimeColumn");  
dateTimeColumn.Format = DateTimePickerFormat.Custom;
dateTimeColumn.CustomFormat = "dd/MM/yyyy HH:mm:ss";
radGridView1.MasterTemplate.Columns.Add(dateTimeColumn);
this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;

for (int i = 0; i < 10; i++)
{
    this.radGridView1.Rows.Add(DateTime.Now.AddDays(i));
}

Workaround: custom filtering: http://docs.telerik.com/devtools/winforms/gridview/filtering/custom-filtering
Completed
Last Updated: 04 Jul 2016 13:07 by ADMIN
To reproduce:

public class CustomGridViewCheckBoxColumn : GridViewCheckBoxColumn
        { 
        
        }

CustomGridViewCheckBoxColumn col = new CustomGridViewCheckBoxColumn();
this.radGridView1.Columns.Add(col);
this.radGridView1.EnableFiltering = true;

1. Click the filter button and select "Custom"
2. Close the dialog.

Workaround:

 this.radGridView1.CreateCompositeFilterDialog += radGridView1_CreateCompositeFilterDialog;

private void radGridView1_CreateCompositeFilterDialog(object sender, GridViewCreateCompositeFilterDialogEventArgs e)
{
    e.Dialog = new CustomCompositeFilterForm();
}

public class CustomCompositeFilterForm : CompositeFilterForm
{
    public override void Initialize(GridViewDataColumn dataColumn, FilterDescriptor filterDescriptor, bool useTypedEditors)
    {
        base.Initialize(dataColumn, filterDescriptor, useTypedEditors);
        if (dataColumn is GridViewCheckBoxColumn)
        {
            RadGroupBox groupBox = this.Controls[0] as RadGroupBox;
            groupBox.Controls.Remove(this.RightEditor);
            groupBox.Controls.Remove(this.LeftEditor);
            MethodInfo mi = typeof(CompositeFilterForm).GetMethod("InitializeCheckBoxEditors", BindingFlags.Instance | BindingFlags.NonPublic);
            mi.Invoke(this, null);
        }
    }
}
Completed
Last Updated: 23 Aug 2016 11:38 by ADMIN
Please refer to the attached sample project.
Completed
Last Updated: 02 Aug 2016 07:47 by ADMIN
To reproduce: please refer to the attached sample project.

1. Edit the CommonInt property for the first child row.
2. Edit the CommonInt property for the second child row.

Workaround: Add the grid programmatically at run time.

Second Workaround: 

this.radGridView1.CellValueChanged+=radGridView1_CellValueChanged;

private void radGridView1_CellValueChanged(object sender, GridViewCellEventArgs e)
        {
            e.Column.OwnerTemplate.Refresh(e.Column);
        }
Completed
Last Updated: 12 Sep 2016 05:21 by ADMIN
To reproduce:
- Bind the grid to progress binding source at design time. 
- Locate GroupDescriptors in Properties and click the ellipsis button to open the GroupDescriptor Collection Editor.
- Click Add and select the new item.
- Select the GroupNames collection to open the SortDescriptor Collection Editor.
- Click Add.
- An exception is thrown and the UI freezes.

Workaround:
Add descriptors at runime.
Completed
Last Updated: 05 Dec 2016 11:59 by ADMIN
To reproduce: populate the grid with data and use the code snippet below:

public Form1()
{
    InitializeComponent();
    this.radGridView1.EnablePaging = true; 
    this.radGridView1.AddNewRowPosition = Telerik.WinControls.UI.SystemRowPosition.Bottom;
}

Select the third page and click the new row at the bottom. The editor is activated as expected but the first page is made current.

Workaround: use the CellEditorInitialized event and move to the desired page

 private void radGridView1_CellEditorInitialized(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e)
 {
     if (e.Row is GridViewNewRowInfo)
     {
         this.radGridView1.MasterTemplate.MoveToPage(2); 
     }
 }