Completed
Last Updated: 11 Jan 2017 10:55 by ADMIN
The GridViewCheckBoxColumn.EditMode property controls when the value of the editor will be submitted to the cell. By default, the value is OnValidate and the value will be submitted only when the current cell changes, the grid looses focus or the active editor is closed by pressing Enter. If you set the EditMode property to OnValueChange it will submit the value immediately after the editor value changes. Please refer to the attached gif files illustrating the difference between the two modes.

To reproduce: if you set the GridViewCheckBoxColumn.EnableHeaderCheckBox property to true, the cell value is always submitted immediately after toggle/untoggle the checkbox without considering that EditMode.OnValidate is used.
Completed
Last Updated: 11 Jan 2017 08:30 by ADMIN
ADMIN
Created by: Julian Benkov
Comments: 1
Category: GridView
Type: Feature Request
3
virtual filtering operation - detached filter GUI to support filtering in external datasource or possibility to replace the data in RadGridView control when new filter is applied.
Completed
Last Updated: 06 Jan 2017 09:18 by ADMIN
To reproduce:

Sub New()
     
    InitializeComponent()

    Dim dt As New DataTable
    dt.Columns.Add("Id", GetType(Integer))
    dt.Columns.Add("Name", GetType(String))
    dt.Columns.Add("Description", GetType(String))

    For index = 1 To 5
        dt.Rows.Add(index, "Item" & index, "Description" & index)
    Next
    Me.RadGridView1.DataSource = dt
    Me.RadGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill
    
    AddHandler Me.RadGridView1.UserAddingRow, AddressOf UserAddingRow

End Sub

Private Sub UserAddingRow(sender As Object, e As Telerik.WinControls.UI.GridViewRowCancelEventArgs)
    Me.RadGridView1.MasterView.TableAddNewRow.ErrorText = ""
    If String.IsNullOrEmpty(e.Rows(0).Cells(0).Value) Then
        e.Cancel = True
        Me.RadGridView1.MasterView.TableAddNewRow.ErrorText = "Empty value is not allowed!"
    End If
End Sub

1. Click the new row and enter a value in the last cell. 
2. Click outside the new row, e.g. click on a data row. The UserAddingRow event is canceled and the new row remains current. 
3. Click a data row again without any modification on the new row. The new row is not current anymore. 
4. However, you perform step 1and 2 but instead of clicking a data row, the user clicks a header cell, the new row is not current from the first time. It is necessary to forbid the user to exit the new row until the validation passes or the new row is canceled by pressing Enter.

Workaround:  use the CellValidating/RowValidating event for validating.
Completed
Last Updated: 06 Jan 2017 08:15 by ADMIN
To reproduce: 

public Form1()
{
    InitializeComponent();
     
    DataTable dt = new DataTable();
    dt.Columns.Add("Id");
    dt.Columns.Add("Name");
    for (int i = 0; i < 1; i++)
    {
        dt.Rows.Add(i, "Item");
    }
    this.radGridView1.DataSource = dt;
    this.radGridView1.SelectionMode = GridViewSelectionMode.FullRowSelect;
    this.radGridView1.ClipboardCopyMode = Telerik.WinControls.UI.GridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText;
    this.radGridView1.MultiSelect = true; 
}

private void button1_Click(object sender, EventArgs e)
{
    this.radGridView1.SelectAll();
    this.radGridView1.Copy();
}

If you click the button, you will notice that only one cell is copied. However, if you add 2 and more rows, the whole grid content will be copied to the clipboard.

Workaround: use the BeginRowCopy/EndRowCopy methods.

private void button1_Click(object sender, EventArgs e)
{
    this.radGridView1.SelectAll();
    this.radGridView1.MasterTemplate.BeginRowCopy();
    this.radGridView1.Copy();
    this.radGridView1.MasterTemplate.EndRowCopy();
}
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: 04 Jan 2017 15:58 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 0
Category: GridView
Type: Bug Report
0
To reproduce:

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

    int charsCount = 5;
    for (int i = 0; i < 20; i++)
    {
        this.radGridView1.Rows.Add(new string('0', charsCount), new string('1', charsCount), 
            new string('2', charsCount), new string('3', charsCount), new string('4', charsCount),
            new string('5', charsCount), new string('6', charsCount), new string('7', charsCount), 
            new string('8', charsCount), new string('9', charsCount));
    }
    HtmlViewDefinition view = new HtmlViewDefinition();
    view.RowTemplate.Rows.Add(new RowDefinition());
    view.RowTemplate.Rows.Add(new RowDefinition());
    view.RowTemplate.Rows.Add(new RowDefinition());
    view.RowTemplate.Rows[0].Cells.Add(new CellDefinition("Column 0", 0, 1, 1));
    view.RowTemplate.Rows[0].Cells.Add(new CellDefinition("Column 1", 0, 1, 3));
    view.RowTemplate.Rows[0].Cells.Add(new CellDefinition("Column 2", 0, 1, 1));
    view.RowTemplate.Rows[0].Cells.Add(new CellDefinition("Column 3", 0, 1, 1));
    view.RowTemplate.Rows[0].Cells.Add(new CellDefinition("Column 7", 0, 1, 1));
    view.RowTemplate.Rows[1].Cells.Add(new CellDefinition("Column 4", 0, 1, 2));
    view.RowTemplate.Rows[1].Cells.Add(new CellDefinition("Column 5", 0, 2, 1));
    view.RowTemplate.Rows[1].Cells.Add(new CellDefinition("Column 8", 0, 1, 1));
    view.RowTemplate.Rows[2].Cells.Add(new CellDefinition("Column 6", 0, 2, 1));
    view.RowTemplate.Rows[2].Cells.Add(new CellDefinition("Column 9", 0, 1, 1));

    this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;

    this.radGridView1.ViewDefinition = view;
}

Workaround:
private void radGridView1_SizeChanged(object sender, EventArgs e)
{
    this.radGridView1.MasterTemplate.Refresh();
}

Completed
Last Updated: 04 Jan 2017 15:58 by ADMIN
To reproduce:

DataTable dt = new DataTable();

public Form1()
{
    InitializeComponent();
    
    dt.Columns.Add("Id");
    dt.Columns.Add("Name");
    dt.Columns.Add("Type");
    for (int i = 0; i < 30; i++)
    {
        dt.Rows.Add(i, "Item" + i, "Type" + i % 2);
    }

    this.radGridView1.DataSource = dt;
    this.radGridView1.AutoExpandGroups = true;
    GroupDescriptor descriptor = new GroupDescriptor();
    descriptor.GroupNames.Add("Type", ListSortDirection.Ascending);
    this.radGridView1.GroupDescriptors.Add(descriptor);
}

private void button1_Click(object sender, EventArgs e)
{
    dt.Rows.Add(30, "Item30", "Type3");
}

Workaround: set the AutoExpandGroups property to false and manually expand the groups when a new row is added.
Completed
Last Updated: 04 Jan 2017 15:58 by ADMIN
When the EnableHeaderCheckBox property is set to true, whenever the checkbox is clicked in the new row, a new row is actually added to the grid before any other modifications are made. This can be replicated in the attached sample project. Run it and click the checkbox in the new row several times. Multiple rows are added.  

Workaround: cancel the RadGridView.UserAddingRow until all the required fields are filled.
Completed
Last Updated: 04 Jan 2017 15:57 by ADMIN
To reproduce
- Set the AutoSize and AutoSizeRows properties to true.
- Start editing a cell.
- Exception occurs.

Workaround:
class MyGrid : RadGridView
{
    protected override void OnResize(EventArgs e)
    {
        //base.OnResize(e);
    }
}
Completed
Last Updated: 28 Dec 2016 09:11 by ADMIN
To reproduce:
- Add a grid to a form and set the EnableHotTracking property to false in the properties window.
- When the application is started the property is reset.

Workaround:
Set the property at runtime.
Unplanned
Last Updated: 27 Dec 2016 11:16 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 0
Category: GridView
Type: Bug Report
1
To reproduce: add a RadGridView and a RadButton on the form. Use the following code snippet:

public RadForm1()
{
    InitializeComponent();
    this.radGridView1.Columns.Add("Col1");
    this.radGridView1.Columns.Add("Col2");
    for (int i = 0; i < 5; i++)
    {
        this.radGridView1.Rows.Add(i, "Item" + i);
    }
    this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;
    this.radGridView1.RowValidating += radGridView1_RowValidating;
    this.radGridView1.UserAddingRow += radGridView1_UserAddingRow;
}

private void radGridView1_UserAddingRow(object sender, Telerik.WinControls.UI.GridViewRowCancelEventArgs e)
{
    e.Cancel = true;
}

private void radGridView1_RowValidating(object sender, Telerik.WinControls.UI.RowValidatingEventArgs e)
{
    if (e.Row.IsModified && e.Row is GridViewDataRowInfo)
    { 
        e.Cancel = true;
    }
}

private void radButton1_Click(object sender, EventArgs e)
{ 
    RadMessageBox.Show("Clicked");
}

1. Select a data cell and activate the editor. Enter some new value and click the button. The Click event is fired.
2. Select the new row and activate the editor. Enter some value and click the button. The Click event is NOT fired.

Workaround: use the CellValidating event instead.
Completed
Last Updated: 20 Dec 2016 06:54 by ADMIN
All event handlers should be made virtual.
All controls should be public or have properties.
Completed
Last Updated: 20 Dec 2016 06:53 by ADMIN
A developer should be able to remove certain fields from there, so his end-users cannot use them to build their expressions.
Completed
Last Updated: 19 Dec 2016 12:06 by ADMIN
To reproduce:
- Add several columns including combo-box columns to a grid. 
- Add one row and upon a button click, change the data source of the combo column.

Workaround: 

Seth the following field to null prior changing the data source: 

    GetType(GridViewComboBoxColumn).GetField("nullBoundItem", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic).SetValue(combo, Nothing)
    combo.DataSource = dt




Completed
Last Updated: 14 Dec 2016 14:23 by ADMIN
Implement the 'substring' function for calculated columns.
Completed
Last Updated: 14 Dec 2016 12:02 by Dickson
Completed
Last Updated: 12 Dec 2016 13:02 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 1
Category: GridView
Type: Feature Request
1
The AllowNaturalSort  property should indicate whether the no-sort state when changing sort order will be allowed.

Workaround:

Private Sub SortChanging(sender As Object, e As Telerik.WinControls.UI.GridViewCollectionChangingEventArgs)
    If e.Action = NotifyCollectionChangedAction.Remove AndAlso e.OldValue = ListSortDirection.Descending Then
        e.Cancel = True
        For Each sd As SortDescriptor In Me.RadGridView1.SortDescriptors
            If sd.PropertyName = e.PropertyName Then
                sd.Direction = ListSortDirection.Ascending
            End If
        Next
    End If
End Sub
Completed
Last Updated: 07 Dec 2016 14:06 by ADMIN
To reproduce:

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

    radGridView1.DataSource = nwindDataSet.Suppliers;
    radGridView1.BestFitColumns(BestFitColumnMode.AllCells);
    GridViewTemplate template = CreateTemplate(this.productsBindingSource);
    template.DataSource = nwindDataSet.Products;
    radGridView1.MasterTemplate.Templates.Add(template);

    GridViewRelation relation = new GridViewRelation(radGridView1.MasterTemplate);
    relation.ChildTemplate = template;
    relation.RelationName = "SuppliersProducts";
    relation.ParentColumnNames.Add("SupplierID");
    relation.ChildColumnNames.Add("SupplierID");
    radGridView1.Relations.Add(relation);
}

private GridViewTemplate CreateTemplate(BindingSource source)
{
    GridViewTemplate template = new GridViewTemplate();
    template.Caption = "TaskTemplate";
    template.AllowAddNewRow = false;
    template.EnableFiltering = true;
    FilterDescriptor filter = new FilterDescriptor();
    filter.PropertyName = "ReorderLevel";
    filter.Operator = FilterOperator.IsNotEqualTo;
    filter.Value = 25;
    template.FilterDescriptors.Add(filter);
    template.ShowFilteringRow = false;   
    template.SortDescriptors.Expression = "ProductName ASC, UnitPrice ASC";
    template.DataSource = source;
    template.BestFitColumns(BestFitColumnMode.AllCells);

    return template;
}

Workaround: set the filter after the hierarchy setup:
private void Form1_Load(object sender, EventArgs e)
{ 
    this.suppliersTableAdapter.Fill(this.nwindDataSet.Suppliers); 
    this.productsTableAdapter.Fill(this.nwindDataSet.Products);

    radGridView1.DataSource = nwindDataSet.Suppliers;
    radGridView1.BestFitColumns(BestFitColumnMode.AllCells);
    GridViewTemplate template = CreateTemplate(this.productsBindingSource);
    template.DataSource = nwindDataSet.Products;
    radGridView1.MasterTemplate.Templates.Add(template);

    GridViewRelation relation = new GridViewRelation(radGridView1.MasterTemplate);
    relation.ChildTemplate = template;
    relation.RelationName = "SuppliersProducts";
    relation.ParentColumnNames.Add("SupplierID");
    relation.ChildColumnNames.Add("SupplierID");
    radGridView1.Relations.Add(relation);
    
    FilterDescriptor filter = new FilterDescriptor();
    filter.PropertyName = "ReorderLevel";
    filter.Operator = FilterOperator.IsNotEqualTo;
    filter.Value = 25; 
    template.FilterDescriptors.Add(filter);
}

private GridViewTemplate CreateTemplate(BindingSource source)
{
    GridViewTemplate template = new GridViewTemplate();
    template.Caption = "TaskTemplate";
    template.AllowAddNewRow = false;
    template.EnableFiltering = true;
  
    template.ShowFilteringRow = false;   
    template.SortDescriptors.Expression = "ProductName ASC, UnitPrice ASC";
    template.DataSource = source;
    template.BestFitColumns(BestFitColumnMode.AllCells);
    
   
    return template;
}

Completed
Last Updated: 07 Dec 2016 13:49 by ADMIN
To reproduce:

DataTable dt = new DataTable();

public Form1()
{
    InitializeComponent();
 
    for (int i = 0; i < 5; i++)
    {
        dt.Columns.Add("Col" + i);
    }
     
    for (int i = 0; i < 5; i++)
    {
        DataRow row = dt.NewRow();
        dt.Rows.Add(row);
        foreach (DataColumn col in dt.Columns)
        {
            row[col.ColumnName] = randomWord(2, 14);
        }
    }
}

static Random r = new Random();
static string chars = "AEIOUBCDFGHJKLMNPQRSTVWXYZ";

static string randomWord(int minlen, int maxlen)
{
    double d1 = minlen + r.NextDouble() * (maxlen - minlen); 
    
    int len = (int)d1;
    
    char[] word = new char[len];
    for (int i = 0; i < len; ++i)
    {
        int index = ((int)Math.Round(25 * r.NextDouble() + 0.4999999999));
        word[i] = chars[index];
    }
    return new string(word);
}

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

    public string Name { get; set; }

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

private void radButton1_Click(object sender, EventArgs e)
{
    this.radGridView1.Columns.Clear();
    foreach (DataColumn col in dt.Columns)
    {
        this.radGridView1.Columns.Add(col.ColumnName);
        this.radGridView1.Columns.Last().FieldName = col.ColumnName;
    }
     this.radGridView1.BestFitColumns(BestFitColumnMode.AllCells); 
}

private void Form1_Load(object sender, EventArgs e)
{
    this.radGridView1.AutoGenerateColumns = false;
    this.radGridView1.DataSource = dt; 

    foreach (DataColumn col in dt.Columns)
    {
        this.radGridView1.Columns.Add(col.ColumnName); 
        this.radGridView1.Columns.Last().FieldName = col.ColumnName;
    }
     this.radGridView1.BestFitColumns(BestFitColumnMode.AllCells); 
}

Workaround: clear the GroupDescriptors  collection as well and add the GroupDescriptor programmatically: http://docs.telerik.com/devtools/winforms/gridview/grouping/setting-groups-programmatically