Completed
Last Updated: 27 Mar 2015 11:05 by ADMIN
Completed
Last Updated: 08 Jun 2015 15:15 by ADMIN
Version 2014.3.1202.40 scrolling worsened

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

            DataTable dataTable = new DataTable();
            dataTable.Columns.Add("Id", typeof(int));
            dataTable.Columns.Add("Id2", typeof(int));
            dataTable.Columns.Add("Id3", typeof(int));
            dataTable.Columns.Add("Id4", typeof(int));

            for (int i = 0; i < 10000; i++)
            {
                dataTable.Rows.Add(i, i + 10, i +20, i+30);
            }

            this.radGridView1.DataSource = dataTable;
            this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;

            this.Load += Form1_Load;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            ExpressionFormattingObject idObj = new ExpressionFormattingObject("1", "Id % 2 = 0", false);
            idObj.CellBackColor = Color.SkyBlue;
            idObj.CellForeColor = Color.Red;
            this.radGridView1.Columns["Id"].ConditionalFormattingObjectList.Add(idObj);

            ExpressionFormattingObject idObj2 = new ExpressionFormattingObject("1", "Id2 % 2 = 0", false);
            idObj2.CellBackColor = Color.LightGray;
            idObj2.CellForeColor = Color.Red;
            this.radGridView1.Columns["Id2"].ConditionalFormattingObjectList.Add(idObj2);

            ExpressionFormattingObject idObj3 = new ExpressionFormattingObject("1", "Id3 % 2 = 0", false);
            idObj3.CellBackColor = Color.LightGreen;
            idObj3.CellForeColor = Color.Red;
            this.radGridView1.Columns["Id3"].ConditionalFormattingObjectList.Add(idObj3);

            ExpressionFormattingObject idObj4 = new ExpressionFormattingObject("1", "Id4 % 2 = 0", false);
            idObj4.CellBackColor = Color.LightYellow;
            idObj4.CellForeColor = Color.Red;
            this.radGridView1.Columns["Id4"].ConditionalFormattingObjectList.Add(idObj4);
        }
    }

Workaround: 
Apply formatting on CellFormatting event
Completed
Last Updated: 12 Oct 2015 14:53 by ADMIN
Workaround - hide the expander items if space is not enough:

 private void radGridView1_CellFormatting(object sender, CellFormattingEventArgs e)
 {
     GridDataCellElement cell = e.CellElement as GridDataCellElement;
     if (cell != null && cell.SelfReferenceLayout != null)
     {
         foreach (RadElement element in cell.SelfReferenceLayout.StackLayoutElement.Children)
         {
             GridExpanderItem expanderItem = element as GridExpanderItem;
             if (expanderItem != null)
             {
                 if (cell.ColumnInfo.Width < cell.SelfReferenceLayout.StackLayoutElement.Size.Width)
                 {
                     expanderItem.Opacity = 0;
                 }
                 else
                 {
                     expanderItem.Opacity = 1;
                 }
             }
         }
     }
 }
Completed
Last Updated: 22 Jun 2015 06:59 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 1
Category: GridView
Type: Feature Request
0

			
Completed
Last Updated: 18 Aug 2015 08:02 by ADMIN
To reproduce:

             this.radGridView1.MultiSelect = true;

            GroupDescriptor descriptor1 = new GroupDescriptor();
            descriptor1.GroupNames.Add("ProductId", ListSortDirection.Ascending );
            this.radGridView1.GroupDescriptors.Add(descriptor1);

Please refer to the attached gif file.

Declined
Last Updated: 13 Mar 2015 16:03 by Vincent
The conditional formatting collection get deleted after closing the property builder.

To reproduce :

Add a gridview with a datasource.
Open property builder
Select a column
Advance -> ConditionalFormattingObjectList
Add a expression, set a name
Press Ok

If you click the ConditionalFormattingObjectList, you can see the expression

If you click close the Property Builder, the list is not saved when you open it again.
Completed
Last Updated: 23 Mar 2015 16:47 by ADMIN
To reproduce:
public RadForm1()
{
    InitializeComponent();
    DataTable master = new DataTable();
    master.Columns.Add("ID", typeof(int));
    master.Columns.Add("F_ID", typeof(int));
    master.Columns.Add("test", typeof(string));

    DataTable child = new DataTable();
    child.Columns.Add("F_ID", typeof(int));
    child.Columns.Add("test", typeof(string));
    child.Columns.Add("CheckBox", typeof(bool));

    for (int i = 0; i < 10; i++)
    {
        master.Rows.Add(i, i , "Row " + i);
        child.Rows.Add(i , "Child " + i, true);
    }

    radGridView1.DataSource = master;
    GridViewTemplate template = new GridViewTemplate();
 
    template.DataSource = child;
    radGridView1.MasterTemplate.Templates.Add(template);

    GridViewRelation relation = new GridViewRelation(radGridView1.MasterTemplate);
    relation.ChildTemplate = template;
    relation.RelationName = "Test";
    relation.ParentColumnNames.Add("F_ID");
    relation.ChildColumnNames.Add("F_ID");
    radGridView1.Relations.Add(relation);
    this.Load += RadForm1_Load;

}

void RadForm1_Load(object sender, EventArgs e)
{
    GridViewCheckBoxColumn col = radGridView1.MasterTemplate.Templates[0].Columns[2] as GridViewCheckBoxColumn;
    col.EnableHeaderCheckBox = true;
   
}

- Expand some rows and click on header check box.
Completed
Last Updated: 08 Jun 2015 11:06 by ADMIN
Use the following code snippet and follow the illustrated steps on the attached gif file:

 private void Form1_Load(object sender, EventArgs e)
 {
     this.customersTableAdapter.Fill(this.nwindDataSet.Customers);
     this.radGridView1.DataSource = this.customersBindingSource;
     this.radGridView1.BestFitColumns(BestFitColumnMode.AllCells);
     ColumnGroupsViewDefinition view = new ColumnGroupsViewDefinition();
     view.ColumnGroups.Add(new GridViewColumnGroup("Customer Contact"));
     view.ColumnGroups.Add(new GridViewColumnGroup("Details"));
     view.ColumnGroups[1].Groups.Add(new GridViewColumnGroup("Address"));
     view.ColumnGroups[1].Groups.Add(new GridViewColumnGroup("Contact"));
     view.ColumnGroups[0].Rows.Add(new GridViewColumnGroupRow());
     view.ColumnGroups[0].Rows[0].Columns.Add(this.radGridView1.Columns["CompanyName"]);
     view.ColumnGroups[0].Rows[0].Columns.Add(this.radGridView1.Columns["ContactName"]);
     view.ColumnGroups[0].Rows[0].Columns.Add(this.radGridView1.Columns["ContactTitle"]);

     view.ColumnGroups[1].Groups[0].Rows.Add(new GridViewColumnGroupRow());
     view.ColumnGroups[1].Groups[0].Rows[0].Columns.Add(this.radGridView1.Columns["Address"]);
     view.ColumnGroups[1].Groups[0].Rows[0].Columns.Add(this.radGridView1.Columns["City"]);
     view.ColumnGroups[1].Groups[0].Rows[0].Columns.Add(this.radGridView1.Columns["Country"]);

     view.ColumnGroups[1].Groups[1].Rows.Add(new GridViewColumnGroupRow());
     view.ColumnGroups[1].Groups[1].Rows[0].Columns.Add(this.radGridView1.Columns["Phone"]);
     view.ColumnGroups[1].Groups[1].Rows[0].Columns.Add(this.radGridView1.Columns["Fax"]);
     radGridView1.ViewDefinition = view;
 }
Declined
Last Updated: 05 Jun 2015 09:18 by ADMIN
When you use a custom GroupComparer for the MasterTemplate, grouping is performed successfully for the first time. However, if you remove all groups and perform grouping again for the same columns, the grid behavior is not as expected: you will notice groups mismatching or duplication. Here is a sample code snippet which incorrect behavior is illustrated on the attached gif file:

public Form1()
{
    InitializeComponent();

    DataTable dt = new DataTable();
    dt.Columns.Add("Reference");
    dt.Columns.Add("Test Case");
    dt.Columns.Add("ChBW");
    dt.Columns.Add("Voltage");
    dt.Columns.Add("Environmental Conditions");
    dt.Columns.Add("RadioAccessTechnology");

    dt.Rows.Add("4.2.1", "E-Utran FDD...", "10", "C Nominal-2", "T Nominal - V Nominal", "E-UTRAN Only");
    dt.Rows.Add("5.2.1", "E-Utran FDD...", "3", "C Nominal-1", "T Nominal - V Nominal", "E-UTRAN Only");
    dt.Rows.Add("14.2.1", "E-Utran FDD...", "1", "C Nominal-3", "T Nominal - V Nominal", "E-UTRAN Only");
    dt.Rows.Add("2.2.1", "E-Utran FDD...", "4", "C Nominal-2", "T Nominal - V Nominal", "E-UTRAN Only");
    dt.Rows.Add("7.2.1", "E-Utran FDD...", "12", "C Nominal-1", "T Nominal - V Nominal", "E-UTRAN Only");
    dt.Rows.Add("2.2.1", "E-Utran FDD...", "2", "C Nominal-3", "T Nominal - V Nominal", "E-UTRAN Only");

    this.radGridControlSelection.DataSource = dt;
    this.radGridControlSelection.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;

    this.radGridControlSelection.MasterTemplate.GroupComparer = new GroupComparer();
}

public class GroupComparer : IComparer<Group<GridViewRowInfo>>
{
    public int Compare(Group<GridViewRowInfo> x, Group<GridViewRowInfo> y)
    {
        if (x.Level != y.Level)
        {
        }
        DataGroup group = x as DataGroup;

        var a = x.Header;
        var b = y.Header;

        int valueA;
        int valueB;

        if (group == null)
        {
            group = y as DataGroup;
        }
        if (group != null && group.GroupDescriptor != null && group.GroupDescriptor.GroupNames.Count > 0)
        {
            string propertyName = group.GroupDescriptor.GroupNames.First().PropertyName;
            if ((propertyName.ToUpper() == "VOLTAGE"))
            {
                int indexA = GetIndexContain(a.ToString().Split(new char[] { '-' })[1]);
                int indexB = GetIndexContain(b.ToString().Split(new char[] { '-' })[1]);

                if (indexA == indexB)
                {
                    return 0;
                }
                else if (indexA < indexB)
                {
                    return -1;
                }
                else
                {
                    return 1;
                }
            }
            else if (propertyName.ToUpper() == "RADIOACCESSTECHNOLOGY")
            {
                return x.Key.ToString().CompareTo(y.Key.ToString());
            }
            // BAND
            else if (propertyName.ToUpper() == "CHBW")
            {
                Int32.TryParse(a, out valueA);
                Int32.TryParse(b, out valueB);

                //ASCENDING SELECTED
                if (group.GroupDescriptor.GroupNames.First().Direction == ListSortDirection.Ascending)
                {
                    if (valueA > valueB)
                    {
                        return 1;
                    }
                    else if (valueA < valueB)
                    {
                        return -1;
                    }
                    else
                    {
                        return 0;
                    }
                }
                //DESCENDING
                else
                {
                    if (valueA > valueB)
                    {
                        return -1;
                    }
                    else if (valueA < valueB)
                    {
                        return 1;
                    }
                    else
                    {
                        return 0;
                    }
                }
            }
        }
        return x.Key.ToString().CompareTo(y.Key.ToString());
    }

    private int GetIndexContain(string a)
    {
        int parsedValue;
        if (int.TryParse(a, out parsedValue))
        {
            return 10 - parsedValue;
        }
        return -1;
    }
}


Workaround:

public class Grid:RadGridView
{
    public override string ThemeClassName  
    { 
        get 
        { 
            return typeof(RadGridView).FullName;  
        }
    }

    protected override RadGridViewElement CreateGridViewElement()
    {
        return new CustomGridViewElement();
    }
}

public class CustomGridViewElement : RadGridViewElement
{
    protected override Type ThemeEffectiveType     
    { 
        get    
        { 
            return typeof(RadGridViewElement);     
        }
    }

    protected override MasterGridViewTemplate CreateTemplate()
    {
        return new CustomMasterGridViewTemplate();
    }
}

public class CustomMasterGridViewTemplate : MasterGridViewTemplate
{
    protected override GridViewListSource CreateListSource()
    {
        return new CustomGridViewListSource(this);
    }
}

public class CustomGridViewListSource : GridViewListSource
{
    public CustomGridViewListSource(GridViewTemplate template) : base(template)
    {
    }

    protected override RadCollectionView<GridViewRowInfo> CreateDefaultCollectionView()
    {
        return new CustomGridDataView(this);
    }
}

public class CustomGridDataView : GridDataView
{
    public CustomGridDataView(GridViewListSource listSource) : base(listSource)
    {
    }

    protected override GroupBuilder<GridViewRowInfo> CreateGroupBuilder()
    {
        return new CustomGroupBuilder(this.Indexer);
    }
}

public class CustomGroupBuilder : GridGroupBuilder
{
    public CustomGroupBuilder(Index<GridViewRowInfo> index) : base(index)
    {
    }

    protected override Group<GridViewRowInfo> GetGroup(GroupCollection<GridViewRowInfo> cache,
        Group<GridViewRowInfo> newGroup, Group<GridViewRowInfo> parent, object key, int level)
    {
        GroupDescriptor currentDescriptor = this.CollectionView.GroupDescriptors[level];
        DataGroup group = (DataGroup)base.GetGroup(null, newGroup, parent, key, level);
        if (group.GroupDescriptor != null && group.GroupDescriptor != currentDescriptor)
        {
            SetGroupDescriptor(group, null);
            IGroupFactory<GridViewRowInfo> groupFactory = this.CollectionView.GroupFactory;
            group = (DataGroup)groupFactory.CreateGroup(key, parent);
            group.GroupBuilder = this;
        }
        SetGroupDescriptor(group, currentDescriptor);
        return group;
    }

    private void SetGroupDescriptor(DataGroup dataGroup, GroupDescriptor currentDescriptor)
    {
        FieldInfo fi = typeof(DataGroup).GetField("groupDescriptor", BindingFlags.NonPublic | BindingFlags.Instance);
        fi.SetValue(dataGroup, currentDescriptor);
    }
}
Completed
Last Updated: 09 Mar 2015 13:05 by ADMIN
To reproduce:
            string fileName = @"..\..\..\exported" + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second + ".xlsx";
            SpreadExport spreadExporter = new SpreadExport(radGridView1);
            spreadExporter.ExportVisualSettings = false;      
            spreadExporter.RunExport(fileName);


Workaround:
spreadExporter.WorkbookCreated += spreadExporter_WorkbookCreated;
private void spreadExporter_WorkbookCreated(object sender, WorkbookCreatedEventArgs e)
{

    Telerik.Windows.Documents.Spreadsheet.PropertySystem.CellStyle defaultStyle = e.Workbook.Styles.Add("DefaultStyle");
    defaultStyle.FontSize = Telerik.Windows.Documents.Spreadsheet.Utilities.UnitHelper.PointToDip(11);
    Telerik.Windows.Documents.Spreadsheet.Model.Worksheet sheet = e.Workbook.Worksheets.First();
    sheet.Cells[0, 0, sheet.UsedCellRange.RowCount, sheet.UsedCellRange.ColumnCount].SetStyleName("DefaultStyle");
    sheet.Columns[sheet.UsedCellRange].AutoFitWidth();
}

Completed
Last Updated: 13 Oct 2015 08:25 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 0
Category: GridView
Type: Bug Report
0
To reproduce:
 this.radGridView1.MultiSelect = true;

Please refer to the attached gif file illustrating better the behavior.

1. Select a row and filter the grid in a way to keep the selected row visible.
2. The first row in the ChildRows collection is selected.
3. Clear the filter. The selection is stored and only one row is selected.
4. Repeat the above steps, but perform such filtering that hides the selected cell. When you clear the filter, two rows are selected instead of one.

Workaround:
private void radGridView1_FilterChanged(object sender, Telerik.WinControls.UI.GridViewCollectionChangedEventArgs e)
        {
            this.radGridView1.ClearSelection();
            if (this.radGridView1.CurrentCell!=null)
            {
                this.radGridView1.CurrentCell.IsSelected = true;
                this.radGridView1.CurrentRow.IsSelected = true;
                this.radGridView1.GridNavigator.Select(this.radGridView1.CurrentRow, this.radGridView1.CurrentColumn);
            }
        }
Completed
Last Updated: 18 Aug 2015 09:56 by ADMIN
Currently, when you have an object which has more than one parent, the grid falls in an invalid state and shows the child under all of the parents, however, it does not behave correctly. As this is not supported scenario, the user should be notified via exception.
Completed
Last Updated: 13 Oct 2015 10:54 by Todor
Workaround:

Subscribe  to CellFormatting event:

void radGridView1_CellFormatting(object sender, CellFormattingEventArgs e)
{
    if (e.CellElement is GridCheckBoxCellElement)
    {
        e.CellElement.ToolTipText = "ErrorMessage for CheckBoxColumn";
        e.CellElement.Children[0].ToolTipText = "ErrorMessage for CheckBoxColumn";
        e.CellElement.Children[0].Children[0].ToolTipText = "ErrorMessage for CheckBoxColumn";
    }
}
Completed
Last Updated: 01 Jun 2015 14:47 by ADMIN
To reproduce: use the following code snippet and follow the steps illustrated on the attached gif file:

private void Form1_Load(object sender, EventArgs e)
{
    this.customersTableAdapter.Fill(this.nwindDataSet.Customers);
    this.radGridView1.DataSource = this.customersBindingSource;
    this.radGridView1.BestFitColumns(BestFitColumnMode.AllCells);
    ColumnGroupsViewDefinition view = new ColumnGroupsViewDefinition();
    view.ColumnGroups.Add(new GridViewColumnGroup("Customer Contact"));
    view.ColumnGroups.Add(new GridViewColumnGroup("Details"));
    view.ColumnGroups[1].Groups.Add(new GridViewColumnGroup("Address"));
    view.ColumnGroups[1].Groups.Add(new GridViewColumnGroup("Contact"));
    view.ColumnGroups[0].Rows.Add(new GridViewColumnGroupRow());
    view.ColumnGroups[0].Rows[0].Columns.Add(this.radGridView1.Columns["CompanyName"]);
    view.ColumnGroups[0].Rows[0].Columns.Add(this.radGridView1.Columns["ContactName"]);
    view.ColumnGroups[0].Rows[0].Columns.Add(this.radGridView1.Columns["ContactTitle"]);

    view.ColumnGroups[1].Groups[0].Rows.Add(new GridViewColumnGroupRow());
    view.ColumnGroups[1].Groups[0].Rows[0].Columns.Add(this.radGridView1.Columns["Address"]);
    view.ColumnGroups[1].Groups[0].Rows[0].Columns.Add(this.radGridView1.Columns["City"]);
    view.ColumnGroups[1].Groups[0].Rows[0].Columns.Add(this.radGridView1.Columns["Country"]);

    view.ColumnGroups[1].Groups[1].Rows.Add(new GridViewColumnGroupRow());
    view.ColumnGroups[1].Groups[1].Rows[0].Columns.Add(this.radGridView1.Columns["Phone"]);
    view.ColumnGroups[1].Groups[1].Rows[0].Columns.Add(this.radGridView1.Columns["Fax"]);
    radGridView1.ViewDefinition = view;
}

Sometimes the incorrect behavior is obtained immediately after you drop the column, but you need to scroll the horizontal scroll-bar to replicate it.

Workaround:
RadGridViewDragDropService svc = this.radGridView1.GridViewElement.GetService<RadGridViewDragDropService>();
svc.Stopped += svc_Stopped;

private void svc_Stopped(object sender, EventArgs e)
{
    int horizontalScrollvalue = this.radGridView1.TableElement.HScrollBar.Value;
    this.radGridView1.MasterTemplate.Refresh();
    this.radGridView1.TableElement.HScrollBar.Value = horizontalScrollvalue;
}

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: 20 Feb 2015 06:48 by Sz
Hello,

I succeed to reproduce the GridViewComboboxColumn exception in this forum post:
http://www.telerik.com/forums/nullreferenceexception-4a6181b2453b#cwDrbIqzp0CPxcgh90b4rQ

I attach a sample project, the database (SQL Server 2012 Express) and a video from the exception.

To reproduce:
- Run the project,
- Sort the column "Állapot" descending.
- Click on column and drop down the list.
- Choose an another value, and click very fast twice. On a slow PC is much easier to reproduce the issue. The important thing, that you need select a value from the combobox and select another row very fast. (See the attached video)

I use the latest Trial version of Winforms.

If you have any question, please contact me.

Best Regards,
László

Workaround:

Private Sub gridMunkak_CreateCell(sender As Object, e As GridViewCreateCellEventArgs) Handles gridMunkak.CreateCell
    If e.CellType = GetType(GridComboBoxCellElement) Then
        e.CellElement = New MyGridComboBoxCellElement(e.Column, e.Row)
    End If
End Sub

Public Class MyGridComboBoxCellElement
    Inherits GridComboBoxCellElement
    Public Sub New(column As GridViewColumn, row As GridRowElement)
        MyBase.New(column, row)
    End Sub

    Public Overrides Sub SetContent()
        If Me.ColumnInfo IsNot Nothing Then
            MyBase.SetContent()
        End If
    End Sub
    Protected Overrides ReadOnly Property ThemeEffectiveType() As Type
        Get
            Return GetType(GridComboBoxCellElement)
        End Get
    End Property
End Class
Completed
Last Updated: 08 Jun 2015 12:52 by ADMIN
How to Reproduce:
Source XML:
<?xml version="1.0" encoding="utf-8"?>
<grandparent Date="2014-12-17Z" Name="Grandparent" SchemaVersion="1.0" Time="04:27:07Z" xmlns="">
 <parent Name="parent1" City="Los Angeles">
   <child Name="Child1" Age="5"/>
   <child Name="Child2" Age="8"/>
 </parent>
 <parent Name="parent2" City="Chicago">
   <child Name="Child1" Age="11"/>
   <child Name="Child2" Age="15"/>
 </parent>
</grandparent>

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

            DataSet xmlDataSet = new DataSet();
            xmlDataSet.ReadXml(@"..\..\test.xml");
            GridViewTemplate parentTemplate = new GridViewTemplate();
            this.radGridView1.MasterTemplate.Templates.Add(parentTemplate);
            GridViewRelation relation = new GridViewRelation(this.radGridView1.MasterTemplate);
            relation.ChildTemplate = parentTemplate;
            relation.RelationName = "Grandparent_Parent";
            relation.ParentColumnNames.Add("grandparent_Id");
            relation.ChildColumnNames.Add("grandparent_Id");
            radGridView1.Relations.Add(relation);
            this.radGridView1.DataSource = xmlDataSet.Tables[0];
            parentTemplate.DataSource = xmlDataSet.Tables[1];
            parentTemplate.AllowAddNewRow = false;

            GridViewTemplate childTemplate = new GridViewTemplate();

            parentTemplate.Templates.Add(childTemplate);
            GridViewRelation childRelation = new GridViewRelation(parentTemplate);

            childRelation.ChildTemplate = childTemplate;
            childRelation.RelationName = "Parent_Child";
            childRelation.ParentColumnNames.Add("parent_Id");
            childRelation.ChildColumnNames.Add("parent_Id");
            radGridView1.Relations.Add(childRelation);

            childTemplate.DataSource = xmlDataSet.Tables[2];
        }
    }

Workaround - set the data sources of the templates last, or use auto generate hierarchy:
            this.radGridView1.AutoGenerateHierarchy = true;

            DataSet xmlDataSet = new DataSet();
            xmlDataSet.ReadXml(@"..\..\test.xml");
            this.radGridView1.DataSource = xmlDataSet;
            radGridView1.DataMember = "grandparent";

            this.radGridView1.AutoGenerateHierarchy = true;
Declined
Last Updated: 15 Sep 2015 13:40 by ADMIN
To reproduce: use the following code snippet:
Sub New()
    InitializeComponent()

    Me.RadGridView1.EnableFiltering = True
    Me.RadGridView1.ShowHeaderCellButtons = True

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

    Dim typeList As New List(Of String)
    typeList.Add("REFERRAL")
    typeList.Add("EMPLOYEE")
    typeList.Add("Type3")
    typeList.Add("Type4")

    Dim rand As New Random
    For index = 1 To 10
        dt.Rows.Add(index, "Name" & index, typeList(rand.Next(0, typeList.Count)),If(index mod 2=0, True,false))
    Next

    Me.RadGridView1.AutoGenerateColumns = False
    Dim decimalColumn As New GridViewDecimalColumn("ID")
    decimalColumn.FieldName = "Id"
    RadGridView1.MasterTemplate.Columns.Add(decimalColumn)

    Dim textBoxColumn As New GridViewTextBoxColumn("Name")
    textBoxColumn.FieldName = "Name"
    RadGridView1.MasterTemplate.Columns.Add(textBoxColumn)

    Dim supplierColumn As GridViewComboBoxColumn = New GridViewComboBoxColumn("Type")
    supplierColumn.FieldName = "Type"
    supplierColumn.DataSource = typeList
    Me.RadGridView1.Columns.Add(supplierColumn)

    Dim checkBoxColumn As New GridViewCheckBoxColumn("Active")
    checkBoxColumn.FieldName = "Active"
    RadGridView1.MasterTemplate.Columns.Add(checkBoxColumn)

    Me.RadGridView1.DataSource = dt
    Me.RadGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill

End Sub

Private Sub RadButton1_Click(sender As Object, e As EventArgs) Handles RadButton1.Click

    Dim activeFilter As New FilterDescriptor()
    activeFilter.PropertyName = "Active"
    activeFilter.Operator = FilterOperator.IsEqualTo
    activeFilter.Value = True

    Dim typeFilter As New CompositeFilterDescriptor()
    typeFilter.FilterDescriptors.Add(New FilterDescriptor("Type", FilterOperator.IsEqualTo, "EMPLOYEE"))
    typeFilter.FilterDescriptors.Add(New FilterDescriptor("Type", FilterOperator.IsEqualTo, "REFERRAL"))
    typeFilter.LogicalOperator = FilterLogicalOperator.Or

    Dim overallFilterDescriptor As New CompositeFilterDescriptor()
    'overallFilterDescriptor.PropertyName = "Type"
    'overallFilterDescriptor.IsFilterEditor = True

    overallFilterDescriptor.FilterDescriptors.Add(typeFilter)
    overallFilterDescriptor.FilterDescriptors.Add(activeFilter)
    overallFilterDescriptor.LogicalOperator = FilterLogicalOperator.And

    Me.RadGridView1.FilterDescriptors.Add(overallFilterDescriptor)
End Sub


Run the project and click the button. You will see that the filter button is not orange indicating that there is applied filter. Additionally, the "Clear filter" option is disabled and the user is not allowed to see the entire data any more.

Workaround: set the overall CompositeFilterDescriptor.PropertyName to a specific column and the IsFilterEditor property to true. Thus, you will be allowed to clear the filter from this column.
Completed
Last Updated: 13 Oct 2015 08:56 by ADMIN
To reproduce:
- Add some columns to a grid.
- Then add a column like this:
private void button2_Click(object sender, System.EventArgs e)
{
    radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;
    Telerik.WinControls.UI.GridViewDataColumn gridViewColumn2 = new Telerik.WinControls.UI.GridViewCheckBoxColumn();
    gridViewColumn2.MinWidth = gridViewColumn2.MaxWidth = 22;
    gridViewColumn2.Width = 100;
   radGridView1.MasterTemplate.Columns.Add(gridViewColumn2);

    gridViewColumn2.MinWidth = 0;
    gridViewColumn2.MaxWidth = 0;

}

Please note that if you add two columns with the above code, you will be able to resize the first one, but  the cursor position is in wrong position.


Workaround:
- Set the MaxWidth before adding the column to the grid.