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: 27 May 2015 08:22 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 0
Category: GridView
Type: Bug Report
0
To reproduce: use the following code snippet and refer to the attached gif file:

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

    for (int i = 0; i < 10; i++)
    {
        GridViewDataRowInfo row = this.radGridView1.Rows.AddNew() as GridViewDataRowInfo;
        foreach (GridViewColumn col in this.radGridView1.Columns)
        {
            row.Cells[col.Name].Value = "Data" + row.Index + "." + col.Index;
        }
    }

    this.radGridView1.MultiSelect = true;
    this.radGridView1.SelectionMode = GridViewSelectionMode.CellSelect;
}


Workaround:
int startColumn = int.MaxValue;
int endColumn = 0;
int startRow = int.MaxValue;
int endRow = 0;

private void radGridView1_MouseDown(object sender, MouseEventArgs e)
{
    GridDataCellElement cellElement = this.radGridView1.ElementTree.GetElementAtPoint(e.Location) as GridDataCellElement;
    if (cellElement != null)
    {
        startColumn = cellElement.ColumnIndex;
        startRow = cellElement.RowIndex;
    }
}

private void radGridView1_MouseUp(object sender, MouseEventArgs e)
{
    GridDataCellElement cellElement = this.radGridView1.ElementTree.GetElementAtPoint(e.Location) as GridDataCellElement;
    if (cellElement != null)
    {
        endColumn = cellElement.ColumnIndex;
        endRow = cellElement.RowIndex;
    }

    if (endColumn < startColumn)
    {
        int swap = endColumn;
        endColumn = startColumn;
        startColumn = swap;
    }
    if (endRow < startRow)
    {
        int swap = endRow;
        endRow = startRow;
        startRow = swap;
    }

    this.radGridView1.ClearSelection();
    int scrollBarValue = this.radGridView1.TableElement.HScrollBar.Value;
    this.radGridView1.BeginUpdate();
    for (int i = startRow; i < endRow + 1; i++)
    {
        for (int j = startColumn; j < endColumn + 1; j++)
        {
            if (!this.radGridView1.Rows[i].Cells[j].IsSelected)
            {
                this.radGridView1.Rows[i].Cells[j].IsSelected = true;
            }
        }
    }
    this.radGridView1.EndUpdate();
    this.radGridView1.TableElement.HScrollBar.Value = scrollBarValue;
}
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: 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: 26 May 2015 14:20 by ADMIN
Allow RadGridVIew Exports to perform independently in BackgroundWorker without suspending UI thread of RadGridView.
Completed
Last Updated: 26 May 2015 14:17 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 1
Category: GridView
Type: Feature Request
1
It takes more than a minute to export 15000 cells.
To reproduce:

public Form1()
{
    InitializeComponent();

    //populate with data
    DataTable dt = new DataTable();
    for (int i = 0; i < 50; i++)
    {
        dt.Columns.Add("Col" + i, typeof(string));
    }
    DataColumn col;
    for (int i = 0; i < 3000; i++)
    {
        DataRow newRow = dt.Rows.Add();

        for (int j = 0; j < dt.Columns.Count; j++)
        {
            col = dt.Columns[j];
            newRow[col.ColumnName] = "Data." + i + " " + dt.Columns.IndexOf(col);
        }
    }
    this.radGridView1.DataSource = dt;
    this.radGridView1.BestFitColumns(Telerik.WinControls.UI.BestFitColumnMode.AllCells);
}

private void radButton1_Click(object sender, EventArgs e)
{
    Telerik.WinControls.UI.Export.SpreadExport.SpreadExport spreadExporter;
  
    spreadExporter = new SpreadExport(this.radGridView1,SpreadExportFormat.Xlsx
    );
    spreadExporter.ExportVisualSettings = false; 
    SaveFileDialog dialog = new SaveFileDialog();
    dialog.FilterIndex = 1;
    dialog.DefaultExt = "*.xlsx";
    dialog.Filter = "Excel file |*.xlsx";
    if (dialog.ShowDialog() == DialogResult.OK)
    {
        Stopwatch sw = new Stopwatch();
        sw.Start();
        string fileName = dialog.FileName;
        spreadExporter.RunExport(fileName);
        sw.Stop();
        Console.WriteLine(string.Format("Elapsed {0}", sw.Elapsed));
        Process.Start(fileName);
    }
}

Completed
Last Updated: 22 May 2015 13:50 by ADMIN
To reproduce: Open Demo application >> GridView >> Export >> Export Hierarchy
Completed
Last Updated: 22 May 2015 13:36 by ADMIN
If one exports a grid with AutoSizeRows set to true the rows that are not visible or have not been scrolled to in the grid will be exported with wrong (very small) height.
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: 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: 11 May 2015 13:18 by ADMIN
To reproduce:
radGridView1.EnableSorting = true;
radGridView1.AutoSizeRows = true;

radGridView1.ShowGroupPanel = false;
radGridView1.EnableGrouping = false;

radGridView1.MasterTemplate.AllowColumnChooser = false;
radGridView1.MasterTemplate.AllowAddNewRow = false;
radGridView1.MasterTemplate.AllowDeleteRow = false;
radGridView1.MasterTemplate.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
radGridView1.MasterTemplate.AllowCellContextMenu = false;
radGridView1.MasterTemplate.AllowColumnHeaderContextMenu = false;

radGridView1.Columns.Add(new GridViewTextBoxColumn("key"));
radGridView1.Columns.Add(new GridViewTextBoxColumn("value"));
radGridView1.Columns.Add(new GridViewCheckBoxColumn { EnableHeaderCheckBox = true, });

var list = new List<KeyValuePair<string, string>>();
list.Add(new KeyValuePair<string, string>("1", "One"));
list.Add(new KeyValuePair<string, string>("2", "Two"));

radGridView1.DataSource = list;
radGridView1.CurrentRow = null;


Completed
Last Updated: 11 May 2015 08:50 by ADMIN
To reproduce:

List<Coordinate> coordinates_ = new List<Coordinate>();

public Form1()
{
    InitializeComponent();
   
    for (int i = 0; i < 10; i++)
    {
        coordinates_.Add(new Coordinate(i * 0.25, i * 0.33, i * 0.46));
    }

    this.radGridView1.AutoGenerateColumns = false;

    string mask = "F2";          

    this.radGridView1.Columns.Add(CreateDecimalColumn("X", "X", mask));
    this.radGridView1.Columns.Add(CreateDecimalColumn("Y", "Y", mask));
    this.radGridView1.Columns.Add(CreateDecimalColumn("Z", "Z", mask));
  
    this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;

    SetRows();
}

GridViewDataColumn CreateDecimalColumn(string name, string headertext, string mask)
{
    var format = "{0:" + mask + "}";
    return new GridViewMaskBoxColumn()
    {
        Name = name,
        HeaderText = headertext,
        MinWidth = 50,
        MaskType = MaskType.Numeric,
        Mask = mask,
        FormatString = format,
        DataType = typeof(double),
        TextAlignment = ContentAlignment.MiddleRight
    };
}

void SetRows()
{
    foreach (var c in coordinates_)
    {
        var ri = radGridView1.Rows.AddNew();
        ri.Cells["X"].Value = c.X;
        ri.Cells["Y"].Value = c.Y;
        ri.Cells["Z"].Value = c.Z;
    }
}

public class Coordinate
{
    public double X { get; set; }

    public double Y { get; set; }

    public double Z { get; set; }

    public Coordinate(double x, double y, double z)
    {
        this.X = x;
        this.Y = y;
        this.Z = z;
    }
}

Workaround:
private void radGridView1_EditorRequired(object sender, EditorRequiredEventArgs e)
{
    if (e.EditorType==typeof(RadMaskedEditBoxEditor))
    {
        e.Editor = new RadMaskedEditBoxEditor();
    }
}  

Declined
Last Updated: 20 Apr 2015 11:49 by ADMIN
To reproduce:

public Form1() 

{ 

InitializeComponent(); 

InitializeRadGridView(); 

this.Size = new System.Drawing.Size(782, 647);

radGridView1.DataSource = GetDataSource(); 

radGridView1.MasterTemplate.ExpandAll(); 

} 



private void InitializeRadGridView()

{ 

radGridView1.EnableGrouping = false;

radGridView1.AllowAddNewRow = false; 

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

GridViewDataColumn column = new GridViewTextBoxColumn(); 

column.FieldName = "Name";

radGridView1.MasterTemplate.Columns.Add(column); 

GridViewTemplate template = new GridViewTemplate(); 

template.AllowCellContextMenu = false; 

template.AllowColumnHeaderContextMenu = false; 

template.AutoGenerateColumns = false;

template.ShowRowHeaderColumn = false; 

template.ShowColumnHeaders = false; 

template.AllowAddNewRow = false; 

template.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill; 

radGridView1.Templates.Add(template); 

GridViewRelation relation = new GridViewRelation(radGridView1.MasterTemplate, template);

relation.ChildColumnNames.Add("Bs"); 

radGridView1.Relations.Add(relation); 

column = new GridViewTextBoxColumn(); 

column.FieldName = "Name";

radGridView1.Templates[0].Columns.Add(column); 

column = new GridViewImageColumn(); 

column.MinWidth = column.MaxWidth = 30;

radGridView1.Templates[0].Columns.Add(column);

radGridView1.Templates[0].AllowRowReorder = true; 

template = new GridViewTemplate(); 

template.AllowCellContextMenu = false;

template.AllowColumnHeaderContextMenu = false; 

template.AutoGenerateColumns = false; 

template.ShowRowHeaderColumn = false; 

template.ShowColumnHeaders = false;

template.AllowAddNewRow = false;

template.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill; 

radGridView1.Templates[0].Templates.Add(template);

relation = new GridViewRelation(radGridView1.Templates[0], template); 

relation.ChildColumnNames.Add("Cs"); 

radGridView1.Relations.Add(relation); 

column = new GridViewTextBoxColumn(); 

column.FieldName = "Name"; 

radGridView1.Templates[0].Templates[0].Columns.Add(column); 

radGridView1.Templates[0].Templates[0].AllowRowReorder = true; 

}



private List<A> GetDataSource() 

{ 

List<A> list = new List<A>(); 

A a1 = new A(); 

a1.Id = 1;

a1.Name = "A1"; 

list.Add(a1);

A a2 = new A();

a2.Id = 2; 

a2.Name = "A2"; 

list.Add(a2); 

A a3 = new A(); 

a3.Id = 3; 

a3.Name = "A3"; 

list.Add(a3); 

B b1 = new B(); 

b1.Id = 10; 

b1.Name = "B1";

a1.Bs.Add(b1);

B b2 = new B(); 

b2.Id = 20; 

b2.Name = "B2"; 

a1.Bs.Add(b2); 

B b3 = new B(); 

b3.Id = 30; 

b3.Name = "B3"; 

a1.Bs.Add(b3); 

B b4 = new B(); 

b4.Id = 40; b4.Name = "B4"; 

a2.Bs.Add(b4); 

B b5 = new B(); 

b5.Id = 50; b5.Name = "B5"; 

a3.Bs.Add(b5); 

C c1 = new C(); 

c1.Id = 100; 

c1.Name = "C1"; 

b1.Cs.Add(c1); 

b3.Cs.Add(c1); 

C c2 = new C(); 

c2.Id = 200; 

c2.Name = "C2"; 

b1.Cs.Add(c2); 

b2.Cs.Add(c2); 

b2.Cs.Add(c1); 

C c3 = new C(); 

c3.Id = 300; 

c3.Name = "C3"; 

b1.Cs.Add(c3); 

b2.Cs.Add(c3); 

b3.Cs.Add(c3); 

C c4 = new C(); 

c4.Id = 400;

c4.Name = "C4"; 

b4.Cs.Add(c4); 

C c5 = new C(); 

c5.Id = 500; 

c5.Name = "C5"; 

b5.Cs.Add(c5); 

return list; 

} 

} 



public class A 

{ 

public int Id { get; set; } 

public string Name { get; set; }

public List<B> Bs { get; set; }

public A() { Bs = new List<B>();

}

} 



public class B

{ 

public int Id { get; set; } 

public string Name { get; set; } 

public List<C> Cs { get; set; } 

public B() { Cs = new List<C>(); 

} 

} 



public class C 

{ 

public int Id { get; set; } 

public string Name { get; set; 

}

} 



The last row is not fully visible, hence a scroll bar should be shown 

Workaround: collapse and expand the last row in the grid: 

radGridView1.MasterTemplate.ExpandAll(); 

radGridView1.ChildRows[radGridView1.ChildRows.Count - 1].IsExpanded = false; 

radGridView1.ChildRows[radGridView1.ChildRows.Count - 1].IsExpanded = true; 
Declined
Last Updated: 20 Apr 2015 10:55 by ADMIN
StackOverFlow exception when the user sorts a GridView control.  The exception occurs in the CellValueNeeded method when accessing e.RowIndex.  The GridView is in VirtualMode.  The error doesn't occur during the initial load of the data.
Declined
Last Updated: 20 Apr 2015 10:52 by ADMIN
When RadGridView is in virtual mode, a StackOverflowException occurs if sorting or filtering is performed.
Declined
Last Updated: 10 Apr 2015 07:46 by ADMIN
Steps to reproduce:
1) Add RadGridView control
2) Add GridViewTextBoxColumn
2) Enable filtering: 

            this.radGridView1.EnableFiltering = true;

3) Programmatically set filter descriptor:

            FilterDescriptor filter = new FilterDescriptor();
            filter.PropertyName = "TextBoxColumn";
            filter.Operator = FilterOperator.IsEqualTo;
            filter.IsFilterEditor = true;
            
            this.radGridView1.FilterDescriptors.Add(filter);

Expected result: the default FilterDescriptor is changed from Contains to IsEqual
Actual result: can not set the default FilterDescriptor from Contains to IsEqual operator to a TextBoxColumn

Workaround:

        private void OnFilterExpressionChanged(object sender, FilterExpressionChangedEventArgs e)
        {
            GridViewTemplate owner = sender as GridViewTemplate;
            List<string> filterExpressions = new List<string>();

            for (int i = 0; i < owner.FilterDescriptors.Count; i++)
            {
                FilterDescriptor descriptor = owner.FilterDescriptors[i];
                string expression = null;

                CompositeFilterDescriptor compositeFilterDescriptor = descriptor as CompositeFilterDescriptor;

                if (compositeFilterDescriptor != null)
                {
                    foreach (FilterDescriptor filterDescriptor in compositeFilterDescriptor.FilterDescriptors)
                    {
                        if (string.IsNullOrEmpty(filterDescriptor.PropertyName) ||
                            owner.Columns[filterDescriptor.PropertyName] == null)
                        {
                            continue;
                        }
                    }

                    expression = CompositeFilterDescriptor.GetCompositeExpression(compositeFilterDescriptor);
                }
                else
                {
                    if (string.IsNullOrEmpty(descriptor.PropertyName) ||
                        owner.Columns[descriptor.PropertyName] == null)
                    {
                        continue;
                    }

                    if (descriptor.Value == null && (descriptor.Operator == FilterOperator.IsNotEqualTo || descriptor.Operator == FilterOperator.IsEqualTo))
                    {
                        expression = string.Empty;
                    }
                    else
                    {
                        expression = descriptor.Expression;
                    }
                }

                if (!string.IsNullOrEmpty(expression))
                {
                    filterExpressions.Add(expression);
                }
            }

            string logicalOperator = (owner.FilterDescriptors.LogicalOperator == FilterLogicalOperator.And) ? " AND " : " OR ";
            string resultExpression = String.Join(logicalOperator, filterExpressions.ToArray());
            e.FilterExpression = resultExpression;
        }
Completed
Last Updated: 06 Apr 2015 13:57 by ADMIN
ADMIN
Created by: Martin Vasilev
Comments: 0
Category: GridView
Type: Feature Request
0
When AutoSizeRows = true and there is column with multiline text values, when hiding that column - shrink row height accordingly.
Completed
Last Updated: 27 Mar 2015 11:05 by ADMIN