private void btnDelete_Click(object sender, EventArgs e)
        {
            TableMemberInfos deletings = new TableMemberInfos(rewriteParent: false);

            foreach (TreeListNode node in treeExist.Selection)
            {
                TableMemberInfo info = treeExist.GetDataRecordByNode(node) as TableMemberInfo;
                if (info != null &&
                    info.Item != null)
                {
                    DBInterface.DestroyInstance(info.Item);

                    UnuseInitTable(info);
                    EraseExistDate(info);

                    deletings.Add(info);
                }
            }

            // Удаление записей
            foreach (TableMemberInfo infoInter in deletings)
            {
                MemberExists.RemoveEx(infoInter);
            }
        }
        public DBInterfaceDesignerForm(DBInterface dbInterface)
        {
            InitializeComponent();
            DBInterface            = dbInterface;
            TypeCurrent            = typeof(string);
            drbtnAddColletion.Text = string.Format("Добавить (String)");

            MemberInits    = new TableMemberInfos();
            MemberExists   = new TableMemberInfos();
            LevelMax       = 6;
            RecordCountMax = 100000;

            treeExist.StateImageList = DBInterface.Icons;

            TypeTables = new XPTables();
            TypeTables.FillTable(DBInterface.TypeDiscoveryService, typeof(XPBaseObject));

            UpdateExistData();

            CreateInitData();

            treeInit.DataSource       = MemberInits;
            treeExist.DataSource      = MemberExists;
            dbInterface.ItemsChanged += dbInterface_ItemsChanged;

            gluInits.Properties.DataSource = TypeTables;

            gluInits.EditValue = TypeTables.Find(DBInterface.TableType);
        }
 /// <summary>
 /// Рекурсивный метод обновления записей уже созданных записей.
 /// </summary>
 private void CreateExistData(DBInterfaceItemXPComplex itemComplex, TableMemberInfos infos, int level)
 {
     foreach (DBInterfaceItemBase item in itemComplex.Items)
     {
         TableMemberInfo tmInfo = DBInterface.PrintExistData(treeExist, item, infos);
         if (item is DBInterfaceItemXPComplex)
         {
             CreateExistData((DBInterfaceItemXPComplex)item, tmInfo.Items, level + 1);
         }
     }
 }
 public TableMemberInfo()
 {
     _Items         = new TableMemberInfos(this);
     IsXPBaseObject = false;
     IsXPCollection = false;
     Item           = null;
     Owner          = null;
     Parent         = null;
     IsUsed         = false;
     ImageIndex     = -1;
     _HashCode      = GetHashCode();
 }
        /// <summary>
        /// Рекурсивный метод обновления надписей и иконок..
        /// </summary>
        private void UpdateExistCaptionAndIcon(TableMemberInfos infos, int level)
        {
            foreach (TableMemberInfo info in infos)
            {
                TableMemberInfo infoExist = MemberExists.FindInfo(info);
                if (infoExist != null)
                {
                    infoExist.Caption = info.Caption;
                    DBInterface.CreateIcon(infoExist.Item, info);

                    if (info.Items.Count > 0)
                    {
                        UpdateExistCaptionAndIcon(info.Items, level + 1);
                    }
                }
            }
        }
        /// <summary>
        /// Поиск схожей записи по свойству FieldName в коллекции.
        /// </summary>
        public TableMemberInfo FindInfo(TableMemberInfo info)
        {
            TableMemberInfo infoTemp = null;

            if (info != null)
            {
                TableMemberInfo infoParent = null;
                int             level      = info.GetLevel();

                TableMemberInfos infosTemp = this;

                for (int i = 0; i < level; i++)
                {
                    infoTemp   = null;
                    infoParent = info.GetParent(level - i);

                    foreach (TableMemberInfo infoIter in infosTemp)
                    {
                        if (infoIter.FieldName == infoParent.FieldName)
                        {
                            infoTemp = infoIter;
                            break;
                        }
                    }
                    if (infoTemp != null)
                    {
                        infosTemp = infoTemp.Items;
                    }
                    else
                    {
                        break;
                    }
                }
            }
            return(infoTemp);
        }