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
Completed
Last Updated: 07 Dec 2016 07:42 by ADMIN
To reproduce:
- Select several rows and cells in excel and copy them.
- Paste in the self-reference grid.
- Only the first row is copied. 

Workaround:
private void RadGridView1_Pasting(object sender, GridViewClipboardEventArgs e)
{
    e.Cancel = true;

    List<List<string>> rows = this.GetTextData();
    PrintGridTraverser traverser = new PrintGridTraverser(this.radGridView1.MasterView);

    while (traverser.Current != this.radGridView1.CurrentRow)
    {
        traverser.MoveNext();
    }

    traverser.MovePrevious();
    int rowIndex = 0;
    int colIndex = this.radGridView1.CurrentColumn.Index;

    while (traverser.MoveNext() && rowIndex < rows.Count)
    {
        for (int i = colIndex; i < this.radGridView1.Columns.Count && i - colIndex < rows[rowIndex].Count; i++)
        {
            traverser.Current.Cells[i].Value = rows[rowIndex][i - colIndex];
        }

        rowIndex++;
    }
}

Completed
Last Updated: 07 Dec 2016 07:42 by ADMIN
To reproduce:
- Add GridViewTextBoxColumn and set the MaxLength property.
- Paste in data row while the is not in edit mode.

Workaround:
private void RadGridView1_Pasting(object sender, Telerik.WinControls.UI.GridViewClipboardEventArgs e)
{
    if (radGridView1.CurrentColumn.Name == "column1")
    {
        GridViewTextBoxColumn col = new GridViewTextBoxColumn();
        var lenght = col.MaxLength;
        if (Clipboard.ContainsData(DataFormats.Text))
        {
            e.Cancel = true;
            string data = Clipboard.GetData(DataFormats.Text).ToString();
            radGridView1.CurrentCell.Value = data.Substring(0, lenght);
        }
    }
}

 
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: 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); 
     }
 }
Completed
Last Updated: 30 Nov 2016 07:24 by ADMIN
Note: if you change the image in Windows8 theme for example, the image is successfully applied.

Workaround: set the CurrentRowHeaderImage property at run time.