I have a custom object that I am using for databinding. I tried to post the sample as a zip file to repeat the problem I am seeing. Maybe I did my custom objects wrong, I really dont know. However, my problem is this, when binding to Hierarchy data if you select a row and expand the child data is shown, however if you select the next row and expand it, then the first child result loses its binding, and you have no data. I am considering purchasing your product for a project, and need your advice...is this a bug? or is my code incorrect? I have custom objects, and I am not using DataSets or DataTables...nor do I want to use those, so those examples really dont help.
Sample Code:
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace TelerikWindowsTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private BusinessTestList _testItemList;
private void Form1_Load(object sender, EventArgs e)
{
_testItemList = new BusinessTestList();
BusinessTestItem item = new BusinessTestItem();
item.Name = "Joe";
item.SubItems.Add(new SubItem() { Count = 22, Date = DateTime.Now });
item.SubItems.Add(new SubItem() { Count = 1, Date = DateTime.Now });
item.SubItems.Add(new SubItem() { Count = 56, Date = DateTime.Now });
item.SubItems.Add(new SubItem() { Count = 75, Date = DateTime.Now });
item.SubItems.Add(new SubItem() { Count = 84, Date = DateTime.Now });
_testItemList.Add(item);
BusinessTestItem secondItem = new BusinessTestItem();
secondItem.Name = "Jack";
secondItem.SubItems.Add(new SubItem() { Count = 1, Date = DateTime.Now });
secondItem.SubItems.Add(new SubItem() { Count = 2, Date = DateTime.Now });
secondItem.SubItems.Add(new SubItem() { Count = 45, Date = DateTime.Now });
secondItem.SubItems.Add(new SubItem() { Count = 67, Date = DateTime.Now });
secondItem.SubItems.Add(new SubItem() { Count = 89, Date = DateTime.Now });
_testItemList.Add(secondItem);
radGridView1.DataSource = _testItemList;
radGridView1.MasterGridViewTemplate.ChildGridViewTemplates[0].DataMember = "SubItems";
radGridView1.MasterGridViewTemplate.ChildGridViewTemplates[0].DataSource = _testItemList;
}
}
public class BusinessTestList : BindingList<BusinessTestItem>
{
}
public class BusinessTestItem : INotifyPropertyChanged
{
public BusinessTestItem()
{
subItems = new SubItemList();
subItems.ListChanged += new ListChangedEventHandler(subItems_ListChanged);
}
private string name = string.Empty;
private SubItemList subItems;
public SubItemList SubItems
{
get
{
return subItems;
}
}
public string Name
{
get
{
return name;
}
set
{
if (value != this.name)
{
this.name = value;
OnPropertyChanged("Name");
}
}
}
public double Total
{
get
{
var value = this.SubItems.Sum(x => x.Count);
return value;
}
}
#region INotifyPropertyChanged Members
public void OnPropertyChanged(string property)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
public void subItems_ListChanged(object sender, ListChangedEventArgs e)
{
OnPropertyChanged("Total");
}
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
public class SubItemList : BindingList<SubItem>
{
}
public class SubItem : INotifyPropertyChanged
{
private double count = 0;
private DateTime date = DateTime.Now;
public double Count
{
get
{
return count;
}
set
{
if (value != this.count)
{
this.count = value;
OnPropertyChanged("Count");
}
}
}
public DateTime Date
{
get
{
return this.date;
}
set
{
if (value != this.date)
{
this.date = value;
OnPropertyChanged("Date");
}
}
}
#region INotifyPropertyChanged Members
public void OnPropertyChanged(string property)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
}
Form1.Designer.cs:
namespace TelerikWindowsTest
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
Telerik.WinControls.UI.GridViewTextBoxColumn gridViewTextBoxColumn3 = new Telerik.WinControls.UI.GridViewTextBoxColumn();
Telerik.WinControls.UI.GridViewTextBoxColumn gridViewTextBoxColumn4 = new Telerik.WinControls.UI.GridViewTextBoxColumn();
Telerik.WinControls.UI.GridViewDecimalColumn gridViewDecimalColumn4 = new Telerik.WinControls.UI.GridViewDecimalColumn();
Telerik.WinControls.UI.GridViewRelation gridViewRelation2 = new Telerik.WinControls.UI.GridViewRelation();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
Telerik.WinControls.UI.GridViewDecimalColumn gridViewDecimalColumn3 = new Telerik.WinControls.UI.GridViewDecimalColumn();
Telerik.WinControls.UI.GridViewDateTimeColumn gridViewDateTimeColumn2 = new Telerik.WinControls.UI.GridViewDateTimeColumn();
this.radGridView1 = new Telerik.WinControls.UI.RadGridView();
this.miscellaneousTheme1 = new Telerik.WinControls.Themes.MiscellaneousTheme();
this.buisnessTestListBindingSource = new System.Windows.Forms.BindingSource(this.components);
this.gridViewTemplate1 = new Telerik.WinControls.UI.GridViewTemplate();
((System.ComponentModel.ISupportInitialize)(this.radGridView1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.radGridView1.MasterGridViewTemplate)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.buisnessTestListBindingSource)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.gridViewTemplate1)).BeginInit();
this.SuspendLayout();
//
// radGridView1
//
this.radGridView1.BackColor = System.Drawing.SystemColors.Control;
this.radGridView1.Cursor = System.Windows.Forms.Cursors.Default;
this.radGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
this.radGridView1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
this.radGridView1.ForeColor = System.Drawing.SystemColors.ControlText;
this.radGridView1.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.radGridView1.Location = new System.Drawing.Point(0, 0);
//
//
//
this.radGridView1.MasterGridViewTemplate.ChildGridViewTemplates.AddRange(new Telerik.WinControls.UI.GridViewTemplate[] {
this.gridViewTemplate1});
gridViewTextBoxColumn3.DataType = typeof(TelerikWindowsTest.SubItemList);
gridViewTextBoxColumn3.FieldAlias = "SubItems";
gridViewTextBoxColumn3.FieldName = "SubItems";
gridViewTextBoxColumn3.HeaderText = "SubItems";
gridViewTextBoxColumn3.IsAutoGenerated = true;
gridViewTextBoxColumn3.IsVisible = false;
gridViewTextBoxColumn3.ReadOnly = true;
gridViewTextBoxColumn3.UniqueName = "SubItems";
gridViewTextBoxColumn3.Width = 88;
gridViewTextBoxColumn4.FieldAlias = "Name";
gridViewTextBoxColumn4.FieldName = "Name";
gridViewTextBoxColumn4.HeaderText = "Name";
gridViewTextBoxColumn4.IsAutoGenerated = true;
gridViewTextBoxColumn4.UniqueName = "Name";
gridViewTextBoxColumn4.Width = 96;
gridViewDecimalColumn4.DataType = typeof(double);
gridViewDecimalColumn4.FieldAlias = "Total";
gridViewDecimalColumn4.FieldName = "Total";
gridViewDecimalColumn4.HeaderText = "Total";
gridViewDecimalColumn4.IsAutoGenerated = true;
gridViewDecimalColumn4.ReadOnly = true;
gridViewDecimalColumn4.UniqueName = "Total";
gridViewDecimalColumn4.Width = 115;
this.radGridView1.MasterGridViewTemplate.Columns.Add(gridViewTextBoxColumn3);
this.radGridView1.MasterGridViewTemplate.Columns.Add(gridViewTextBoxColumn4);
this.radGridView1.MasterGridViewTemplate.Columns.Add(gridViewDecimalColumn4);
this.radGridView1.MasterGridViewTemplate.DataSource = this.buisnessTestListBindingSource;
this.radGridView1.Name = "radGridView1";
gridViewRelation2.ChildColumnNames = ((System.Collections.Specialized.StringCollection)(resources.GetObject("gridViewRelation2.ChildColumnNames")));
gridViewRelation2.ChildTemplate = this.gridViewTemplate1;
gridViewRelation2.ParentColumnNames = ((System.Collections.Specialized.StringCollection)(resources.GetObject("gridViewRelation2.ParentColumnNames")));
gridViewRelation2.ParentTemplate = this.radGridView1.MasterGridViewTemplate;
gridViewRelation2.RelationName = "RelationShip";
this.radGridView1.Relations.Add(gridViewRelation2);
this.radGridView1.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.radGridView1.Size = new System.Drawing.Size(442, 273);
this.radGridView1.TabIndex = 0;
this.radGridView1.Text = "radGridViewPreview";
this.radGridView1.ThemeName = "Office2007Blue";
//
// buisnessTestListBindingSource
//
this.buisnessTestListBindingSource.DataSource = typeof(TelerikWindowsTest.BusinessTestList);
this.buisnessTestListBindingSource.Position = 2;
//
// gridViewTemplate1
//
gridViewDecimalColumn3.DataType = typeof(double);
gridViewDecimalColumn3.FieldAlias = "Count";
gridViewDecimalColumn3.FieldName = "Count";
gridViewDecimalColumn3.HeaderText = "Count";
gridViewDecimalColumn3.IsAutoGenerated = true;
gridViewDecimalColumn3.UniqueName = "Count";
gridViewDateTimeColumn2.DataType = typeof(System.DateTime);
gridViewDateTimeColumn2.FieldAlias = "Date";
gridViewDateTimeColumn2.FieldName = "Date";
gridViewDateTimeColumn2.HeaderText = "Date";
gridViewDateTimeColumn2.IsAutoGenerated = true;
gridViewDateTimeColumn2.UniqueName = "Date";
this.gridViewTemplate1.Columns.Add(gridViewDecimalColumn3);
this.gridViewTemplate1.Columns.Add(gridViewDateTimeColumn2);
this.gridViewTemplate1.DataMember = "SubItems";
this.gridViewTemplate1.DataSource = this.buisnessTestListBindingSource;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(442, 273);
this.Controls.Add(this.radGridView1);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
((System.ComponentModel.ISupportInitialize)(this.radGridView1.MasterGridViewTemplate)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.radGridView1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.buisnessTestListBindingSource)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.gridViewTemplate1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private Telerik.WinControls.UI.RadGridView radGridView1;
private Telerik.WinControls.Themes.MiscellaneousTheme miscellaneousTheme1;
private System.Windows.Forms.BindingSource buisnessTestListBindingSource;
private Telerik.WinControls.UI.GridViewTemplate gridViewTemplate1;
}
}
Thank you,
Jeff