private void RecreateChildItems()
 {
     if (this.ListView != null && this.DataSource != null && this.childDataSources.Count > 0)
     {
         this.ApplySort();
         if (this.ListView.InvokeRequired)
         {
             this.ListView.Invoke(new MethodInvoker(this.RecreateChildItems));
             return;
         }
         this.ListView.BeginUpdate();
         try
         {
             if (this.ChildrenItems.Count > 0)
             {
                 if (this.ChildrenItems[0].IsInListView)
                 {
                     this.ListView.BackupItemsStates();
                 }
                 this.ChildrenItems.Clear();
             }
             foreach (object obj in this.childDataSources)
             {
                 BindingSource bindingSource = (BindingSource)obj;
                 foreach (object obj2 in bindingSource)
                 {
                     DataTreeListViewItem dataTreeListViewItem = this.ListView.InternalCreateListViewItemForRow(obj2);
                     dataTreeListViewItem.ColumnMapping = (DataTreeListViewColumnMapping)this.dataSource2ColumnMapping[bindingSource];
                     dataTreeListViewItem.UpdateItem();
                     if (dataTreeListViewItem.ColumnMapping.ImageIndex < 0)
                     {
                         if (!string.IsNullOrEmpty(this.ListView.ImagePropertyName))
                         {
                             PropertyDescriptorCollection properties         = TypeDescriptor.GetProperties(obj2);
                             PropertyDescriptor           propertyDescriptor = properties[this.ListView.ImagePropertyName];
                             if (propertyDescriptor != null)
                             {
                                 dataTreeListViewItem.ImageKey = DataListView.GetPropertyValue(obj2, propertyDescriptor).ToString();
                             }
                         }
                     }
                     else
                     {
                         dataTreeListViewItem.ImageIndex = dataTreeListViewItem.ColumnMapping.ImageIndex;
                     }
                     this.ChildrenItems.Add(dataTreeListViewItem);
                 }
             }
             this.ListView.RaiseItemsForRowsCreated(EventArgs.Empty);
         }
         finally
         {
             this.ListView.EndUpdate();
         }
         this.ListView.TrySelectItemBySpecifiedIdentity();
     }
 }
        private void ChildList_ListChanged(object sender, ListChangedEventArgs e)
        {
            if (this.ListView == null)
            {
                this.ChildrenItems.Clear();
                this.IsExpanded = false;
                this.childDataSources.Clear();
                return;
            }
            IList list = sender as IList;

            if (list != null)
            {
                switch (e.ListChangedType)
                {
                case ListChangedType.Reset:
                case ListChangedType.ItemDeleted:
                    this.ListView.SelectedIndices.Clear();
                    this.ListView.RaiseSelectionChanged();
                    this.RecreateChildItems();
                    return;

                case ListChangedType.ItemChanged:
                {
                    object row = list[e.NewIndex];
                    DataTreeListViewItem dataTreeListViewItem = this.ListView.GetItemFromRow(row) as DataTreeListViewItem;
                    if (dataTreeListViewItem == null)
                    {
                        return;
                    }
                    if (this.ListView.InvokeRequired)
                    {
                        this.ListView.Invoke(new MethodInvoker(dataTreeListViewItem.UpdateItem));
                        return;
                    }
                    dataTreeListViewItem.UpdateItem();
                    return;
                }
                }
                this.RecreateChildItems();
            }
        }