Completed
Last Updated: 28 Feb 2018 13:56 by ADMIN
Use attached to reproduce.
- Check the filter box
- Uncheck the header checkbox.
- The cells are still visible and you cannot click on the data check boxes.

 
Declined
Last Updated: 26 Feb 2018 17:39 by Mike
To reproduce:
Public Class RadForm1
    Public RadGridView1 As RadGridView

    Private Sub RadForm1_Load(sender As Object, e As EventArgs) Handles Me.Load
        CreateGrid()
        FormatGrid()
        SetDataSource()
    End Sub

    Private Sub CreateGrid()
        Try
            RadGridView1 = New RadGridView
            Me.Controls.Add(RadGridView1)
        Catch ex As Exception
            MessageBox.Show(Me, ex.Message)
        End Try
    End Sub
    Private Sub FormatGrid()

        Dim col As GridViewTextBoxColumn
        With RadGridView1
            col = New GridViewTextBoxColumn
            With col
                .FieldName = "FieldID"
                'NOTE: Comment out NullValue = "" to prevent the unhandled exception
                .NullValue = ""
            End With
            .Columns.Add(col)
        End With
    End Sub
    Private Sub SetDataSource()
        Dim table As DataTable = Nothing
        Dim row As DataRow = Nothing
        table = New DataTable("GridList")
        table.Columns.Add("FieldID", GetType(System.Guid))
        row = table.NewRow
        row("FieldID") = Guid.Empty
        table.Rows.Add(row)
        RadGridView1.DataSource = table
    End Sub
End Class

Workaround:
Comment this line 
NullValue = ""
Unplanned
Last Updated: 21 Feb 2018 13:08 by ADMIN
Please refer to the attached sample project. The ResizeColumnsProportionally.gif illustrates the correct behavior of columns resizing. However, if you make a certain column with fixed size, the columns resizing is not proportional any more. The ColumnsWidthNOTAdjustedProportionally.gif demonstrates better the wrong behavior.

Workaround:  handle the SizeChanged event and adjust the columns' width property programmatically in order to obtain the desired widths.
Completed
Last Updated: 16 Feb 2018 10:29 by ADMIN
Completed
Last Updated: 15 Feb 2018 08:26 by ADMIN
ADMIN
Created by: Hristo
Comments: 0
Category: GridView
Type: Feature Request
1
Until the new functionality becomes available you can use the workaround solution in the attached project.
Completed
Last Updated: 12 Feb 2018 14:57 by ADMIN
Excel does not support dates prior to 1/1/1900, however,  we could export such dates as simple strings: https://support.office.com/en-us/article/excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3

How to reproduce:
 public partial class Form1 : RadForm
 {
     public Form1()
     {
         InitializeComponent();

         this.radGridView1.DataSource = this.GetData();
         this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;
     }

     private object GetData()
     {
         DataTable dt = new DataTable();
         dt.Columns.Add("Id", typeof(int));
         dt.Columns.Add("Name", typeof(string));
         dt.Columns.Add("Bool", typeof(bool));
         dt.Columns.Add("Date", typeof(DateTime));

         DateTime date = new DateTime(1850, 1, 1);
         for (int i = 0; i < 100; i++)
         {
             dt.Rows.Add(i, "Name " + i, i % 2 == 0, date.AddYears(i));
         }

         return dt;
     }
     
     FieldInfo fi;
     private void radButton1_Click(object sender, EventArgs e)
     {
         //Old Export using the ExcelML format
         this.fi = typeof(Telerik.WinControls.UI.Export.ExcelML.CellElement).GetField("_dataElement", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
         ExportToExcelML exporter = new ExportToExcelML(this.radGridView1);
         string fileName = @"..\..\data.xls";
         exporter.RunExport(fileName);

         //New export utilizing the SpreadProcessing libraries
         GridViewSpreadExport spreadExporter = new GridViewSpreadExport(this.radGridView1);

         SpreadExportRenderer exportRenderer = new SpreadExportRenderer();
         spreadExporter.RunExport(@"..\..\data.xlsx", exportRenderer);
     }
 }


Workaround: handle the CellFormatting event
public partial class Form1 : RadForm
{
    public Form1()
    {
        InitializeComponent();

        this.radGridView1.DataSource = this.GetData();
        this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;
    }

    private object GetData()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("Id", typeof(int));
        dt.Columns.Add("Name", typeof(string));
        dt.Columns.Add("Bool", typeof(bool));
        dt.Columns.Add("Date", typeof(DateTime));

        DateTime date = new DateTime(1850, 1, 1);
        for (int i = 0; i < 100; i++)
        {
            dt.Rows.Add(i, "Name " + i, i % 2 == 0, date.AddYears(i));
        }

        return dt;
    }
    
    FieldInfo fi;
    private void radButton1_Click(object sender, EventArgs e)
    {
        //Old Export using the ExcelML format
        this.fi = typeof(Telerik.WinControls.UI.Export.ExcelML.CellElement).GetField("_dataElement", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
        ExportToExcelML exporter = new ExportToExcelML(this.radGridView1);
        exporter.ExcelCellFormatting += Exporter_ExcelCellFormatting;
        string fileName = @"..\..\data.xls";
        exporter.RunExport(fileName);

        //New export utilizing the SpreadProcessing libraries
        GridViewSpreadExport spreadExporter = new GridViewSpreadExport(this.radGridView1);
         spreadExporter.CellFormatting += SpreadExporter_CellFormatting;

        SpreadExportRenderer exportRenderer = new SpreadExportRenderer();
        spreadExporter.RunExport(@"..\..\data.xlsx", exportRenderer);
    }

    private void SpreadExporter_CellFormatting(object sender, Telerik.WinControls.Export.CellFormattingEventArgs e)
    {
        if (e.GridRowIndex >= 1 && e.GridCellInfo.ColumnInfo is GridViewDateTimeColumn && ((DateTime)e.GridCellInfo.Value).Year < 1900)
        {
            Telerik.Windows.Documents.Spreadsheet.Model.CellSelection cell = e.CellSelection as Telerik.Windows.Documents.Spreadsheet.Model.CellSelection;
            cell.SetValue(e.GridCellInfo.Value.ToString());
        }
    }

    private void Exporter_ExcelCellFormatting(object sender, Telerik.WinControls.UI.Export.ExcelML.ExcelCellFormattingEventArgs e)
    {
        if (e.GridRowIndex > -1 && e.GridCellInfo.ColumnInfo is GridViewDateTimeColumn && ((DateTime)e.GridCellInfo.Value).Year < 1900)
        {
            DataElement data = new DataElement();
            data.DataItem = e.GridCellInfo.Value.ToString();
            this.fi.SetValue(e.ExcelCellElement, data);
        }
    }
}

Completed
Last Updated: 12 Feb 2018 09:12 by Don
Workaround: handle the GridViewPdfExport.CellFormatting event and apply the column`s format string

Public Class Form1
    Sub New()

        InitializeComponent()

        Me.RadGridView1.DataSource = Me.GetData()
        Me.RadGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill

        Dim decimalColumn = DirectCast(Me.RadGridView1.Columns("Money"), GridViewDecimalColumn)
        decimalColumn.DecimalPlaces = 0
        decimalColumn.FormatString = "{0:C0}"

        Dim dateTimeColumn = DirectCast(Me.RadGridView1.Columns("Date"), GridViewDateTimeColumn)
        dateTimeColumn.FormatString = "{0:D}"

    End Sub

    Private Function GetData() As Object
        Dim dataTable As New DataTable()
        dataTable.Columns.Add("Id", GetType(Integer))
        dataTable.Columns.Add("Name", GetType(String))
        dataTable.Columns.Add("Money", GetType(Decimal))
        dataTable.Columns.Add("Date", GetType(DateTime))

        For i As Integer = 0 To 999
            dataTable.Rows.Add(i, "Name " & i, i * 10, DateTime.Now.AddDays(i))
        Next

        Return dataTable
    End Function

    Private Sub RadButton1_Click(sender As Object, e As EventArgs) Handles RadButton1.Click
        Dim pdfExporter = New GridViewPdfExport(Me.RadGridView1)
        AddHandler pdfExporter.CellFormatting, AddressOf pdfExporter_CellFormatting
        Dim renderer = New PdfExportRenderer()
        Dim fileName As String = "..\..\exported-grid.pdf"

        pdfExporter.RunExport(fileName, renderer)
    End Sub

    Private Sub pdfExporter_CellFormatting(sender As Object, e As PdfExportCellFormattingEventArgs)
        If e.RowIndex > -1 Then
            e.CellElement.Text = TryCast(RadDataConverter.Instance.Format(e.Row.Cells(e.ColumnIndex).Value, GetType(String), e.Column), String)
        End If
    End Sub

End Class
Completed
Last Updated: 06 Feb 2018 07:05 by ADMIN
To reproduce: if you pin a calculator or a hyperlink column you will notice that the cells belonging to these columns remain white. However, the cells from other column types  have a light blue/gray fill color for pinned state. 

Workaround: 
private void RadGridView1_CellFormatting(object sender, CellFormattingEventArgs e)
{
    if (e.Column.IsPinned)
    {
        e.CellElement.BackColor = Color.FromArgb(235, 244, 252);
    }
    else
    {
        e.CellElement.ResetValue(LightVisualElement.BackColorProperty, ValueResetFlags.Local);
    }
}
Declined
Last Updated: 06 Feb 2018 06:47 by ADMIN
To reproduce: please refer to the attached gif file and sample project.

Workaround: when you set the DrawFill property to true, specify the BackColor to the desired one and reset for the rest of the cells.

private void radGridView1_CellFormatting(object sender, Telerik.WinControls.UI.CellFormattingEventArgs e)
{
    if (e.Column.Name == "ProductName" && e.Row is GridViewDataRowInfo)
    {
        if (e.CellElement.Value.ToString().Contains("C"))
        {
            e.CellElement.DrawFill = true;
            e.CellElement.BackColor = Color.Yellow;
            e.CellElement.GradientStyle = GradientStyles.Solid;
            e.CellElement.ForeColor = Color.OliveDrab;
        }
        else
        { 
            e.CellElement.ResetValue(LightVisualElement.DrawFillProperty, ValueResetFlags.Local);
            e.CellElement.ResetValue(LightVisualElement.GradientStyleProperty, ValueResetFlags.Local);
            e.CellElement.ResetValue(LightVisualElement.ForeColorProperty, ValueResetFlags.Local);  
            e.CellElement.ResetValue(LightVisualElement.BackColorProperty, ValueResetFlags.Local);  
        }
    }
    else
    { 
        e.CellElement.ResetValue(LightVisualElement.DrawFillProperty, ValueResetFlags.Local);
        e.CellElement.ResetValue(LightVisualElement.GradientStyleProperty, ValueResetFlags.Local);
        e.CellElement.ResetValue(LightVisualElement.ForeColorProperty, ValueResetFlags.Local);    
        e.CellElement.ResetValue(LightVisualElement.BackColorProperty, ValueResetFlags.Local);  
    }
}
Declined
Last Updated: 06 Feb 2018 06:40 by ADMIN
To reproduce:
- Add a RadGridView and a button to a blank form.
- Subscribe to CellValidating event from the grid and set the cancel property of the CellValidatingEventArgs to true upon some condition.
- Add click event handler for the button and print a message in it.
- Start the application and enter some invalid data in the grid cell, then click the button.
- The code from the button's event handler is executed.

Workaround use a flag to determine when to execute the corresponding button code:
bool validating = false;

void radGridView1_CellValidating(object sender, Telerik.WinControls.UI.CellValidatingEventArgs e)
{
    if (e.Value.ToString().Length < 5)
    {
        e.Cancel = true;
        validating = true;
        e.Row.ErrorText = "Validation error!";
    }
    else
    {
        validating = false;
    }
}

private void radButton1_Click(object sender, EventArgs e)
{
    if (!validating)
    {
        Debug.WriteLine("Executed");
    }
}


Completed
Last Updated: 05 Feb 2018 10:40 by ADMIN
To reproduce: please refer to the attached screenshot.

Workaround: add the FilterDescriptor programmatically: https://docs.telerik.com/devtools/winforms/gridview/filtering/setting-filters-programmatically-(simple-descriptors)
Completed
Last Updated: 05 Feb 2018 09:39 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 0
Category: GridView
Type: Bug Report
2
To reproduce:

            this.radGridView1.Columns.Add("FIRST CELL ID A");

            this.radGridView1.Rows.Add("405-55-214-41763");
            this.radGridView1.Rows.Add("405-55-214-46682");
            this.radGridView1.Rows.Add("405-55-214-46682");

            this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;
            this.radGridView1.MultiSelect = true;
            this.radGridView1.SelectionMode = Telerik.WinControls.UI.GridViewSelectionMode.CellSelect;

Please refer to the attached gif file illustrating better the text moving. 

Workaround: 
        private void radGridView1_CellFormatting(object sender, Telerik.WinControls.UI.CellFormattingEventArgs e)
        {
            e.CellElement.BorderBottomWidth = 2;
            e.CellElement.BorderRightWidth = 2;
            e.CellElement.BorderTopWidth = 2;
            e.CellElement.BorderLeftWidth = 2;
        }
Unplanned
Last Updated: 31 Jan 2018 08:29 by ADMIN
To reproduce:
 this.radGridView1.SummaryRowsBottom.Insert(0, summaryRowItem2);
 this.radGridView1.SummaryRowsBottom.Move(2, 0);

Workaround:
Remove all items and add them back with a spesific order. 
Completed
Last Updated: 25 Jan 2018 16:20 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 0
Category: GridView
Type: Bug Report
1
Bind the grid to the following DataTable:

            DataTable dt = new DataTable();     
            dt.Columns.Add("X.Y"); 
            dt.Columns.Add("X");   
            
            dt.Rows.Add("Data X.Y", "Data X");

            this.radGridView1.DataSource = dt;

You will notice that the second column "X" is missing.

Note: if you change the order of adding the columns, both columns will be added.
Unplanned
Last Updated: 05 Jan 2018 14:10 by ADMIN
The new mode should allow copying of single cells even when having the SelectionMode set to FullRowSelect. The attached project features a possible workaround.
Completed
Last Updated: 03 Jan 2018 06:38 by ADMIN
How to reproduce:
Create a grid with enabled filtering and open the excel-like filter popup of a DateTime column.

Workaround: 
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        this.radGridView1.DataSource = this.GetData();

        this.radGridView1.EnableFiltering = true;
        this.radGridView1.ShowFilteringRow = true;
        this.radGridView1.ShowHeaderCellButtons = true;
        this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;

        this.radGridView1.FilterPopupInitialized += RadGridView1_FilterPopupInitialized;
    }

    private void RadGridView1_FilterPopupInitialized(object sender, FilterPopupInitializedEventArgs e)
    {
        RadDateFilterPopup popup = e.FilterPopup as RadDateFilterPopup;
        if (popup != null && popup.Width < 300)
        {
            popup.Width += 100;
            popup.Height += 100;
        }
    }

    private object GetData()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("Id", typeof(int));
        dt.Columns.Add("Name", typeof(string));
        dt.Columns.Add("Bool", typeof(bool));
        dt.Columns.Add("Date", typeof(DateTime));

        for (int i = 0; i < 100; i++)
        {
            dt.Rows.Add(i, "Name " + i, i % 2 == 0, DateTime.Now.AddDays(1));
        }

        return dt;
    }
}
Completed
Last Updated: 22 Dec 2017 14:00 by ADMIN
How to reproduce: 
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        this.radGridView1.DataSource = this.GetData();
        this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;
        this.radGridView1.EnableFiltering = true;
        this.radGridView1.ShowHeaderCellButtons = true;

        this.radGridView1.FilterPopupRequired += RadGridView1_FilterPopupRequired;

        GridViewDateTimeColumn date = this.radGridView1.Columns["Date"] as GridViewDateTimeColumn;
        date.DataType = typeof(DateTime);
        date.FilteringMode = GridViewTimeFilteringMode.Date;
    }

    private void RadGridView1_FilterPopupRequired(object sender, Telerik.WinControls.UI.FilterPopupRequiredEventArgs e)
    {
        if (e.Column.GetType().Name == "GridViewDateTimeColumn")
        {
            RadListFilterPopup popup = new RadListFilterPopup(e.Column, true);
            e.FilterPopup = popup;
        }
    }

    private object GetData()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("Id", typeof(int));
        dt.Columns.Add("Name", typeof(string));
        dt.Columns.Add("Date", typeof(DateTime));
        dt.Columns.Add("Bool", typeof(bool));

        DateTime date = DateTime.Now;
        for (int i = 0; i < 1500; i++)
        {
            dt.Rows.Add(i, "Name " + i, date.AddDays(i), i % 2 == 0);
        }

        return dt;
    }

Workaround: custom RadListFilterPopup

public class MyRadListFilterPopup : RadListFilterPopup
{
    public MyRadListFilterPopup(GridViewDataColumn dataColumn, bool groupedDateValues)
        : base(dataColumn, groupedDateValues)
    { }

    protected override void OnButtonOkClick(EventArgs e)
    {
        FilterOperator filterOperator = FilterOperator.IsEqualTo;

        IRadListFilterElement listFilterElement = typeof(RadListFilterPopup).GetField("listFilterElement", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).
            GetValue(this) as IRadListFilterElement;

        switch (listFilterElement.SelectedMode)
        {
            case ListFilterSelectedMode.All:
                filterOperator = FilterOperator.None;
                break;
            case ListFilterSelectedMode.Null:
                filterOperator = FilterOperator.IsNull;
                break;
            case ListFilterSelectedMode.NotNull:
                filterOperator = FilterOperator.IsNotNull;
                break;
        }

        if (filterOperator != FilterOperator.IsEqualTo)
        {
            SetFilterOperator(filterOperator);
            this.ClosePopup(RadPopupCloseReason.CloseCalled);
        }
        else
        {
            CompositeFilterDescriptor compositeFilterDescriptor = new CompositeFilterDescriptor();
            compositeFilterDescriptor.PropertyName = base.DataColumn.Name;
            compositeFilterDescriptor.LogicalOperator = FilterLogicalOperator.Or;

            foreach (DictionaryEntry entry in listFilterElement.SelectedValues)
            {
                foreach (object value in (ArrayList)entry.Value)
                {
                    FilterDescriptor descriptor;
                    if (base.DataColumn is GridViewDateTimeColumn || base.DataColumn.DataType == typeof(DateTime) ||
                        base.DataColumn.DataType == typeof(DateTime?))
                    {
                        descriptor = new DateFilterDescriptor(base.DataColumn.Name, FilterOperator.IsEqualTo, (DateTime?)value, false);
                    }
                    else
                    {
                        descriptor = new FilterDescriptor(base.DataColumn.Name, FilterOperator.IsEqualTo, value);
                    }
                    compositeFilterDescriptor.FilterDescriptors.Add(descriptor);
                }
            }

            base.FilterDescriptor = compositeFilterDescriptor;
            OnFilterConfirmed();
        }
    }
}