Exemplo n.º 1
0
        //получить подузлы
        public List <DataProvider> GetNodes()
        {
            if (bWasGetNodes)
            {
                return(ChildProviders);
            }
            bWasGetNodes   = true;
            ChildProviders = new List <DataProvider>();
            SetNodes();
            if (Childs == null)
            {
                return(ChildProviders);
            }
            bool bDbSetType = false;

            if (this is StandartNode)
            {
                StandartNode SN = (StandartNode)this;
                bDbSetType = SN.bDbSetType;
            }
            IEnumerator enumerator;

            if (bDbSetType)
            {
                MethodInfo MI = Childs.GetType().GetMethod("AsQueryable");
                if (MI == null)
                {
                    return(ChildProviders);
                }
                IQueryable Collection = (IQueryable)MI.Invoke(Childs, null);
                enumerator = Collection.GetEnumerator();
            }
            else
            {
                MethodInfo MI = Childs.GetType().GetMethod("GetEnumerator");
                if (MI == null)
                {
                    return(ChildProviders);
                }
                enumerator = (IEnumerator)MI.Invoke(Childs, null);
            }
            if (enumerator != null)
            {
                while (enumerator.MoveNext())
                {
                    DataProvider Child = (DataProvider)enumerator.Current;
                    Child.ParentNode = this;
                    ChildProviders.Add(Child);
                }
            }
            return(ChildProviders);
        }
Exemplo n.º 2
0
        //модификация базы данных
        public virtual bool Modify(ApplicationContext db,
                                   TableData_Server newTD)
        {
            if (NodeType == TreeViewNodeType.Checking ||
                NodeType == TreeViewNodeType.Setting)
            {
                return(ModifyForPluginParameters(db, newTD));
            }
            bool bDbSetType = false;

            if (this is StandartNode)
            {
                StandartNode SN = (StandartNode)this;
                bDbSetType = SN.bDbSetType;
            }
            //если в новой таблице нет строк
            if (newTD.RowContainers.Count == 0 && !bDbSetType)
            {
                //удалить все строки
                MethodInfo MI = Childs.GetType().GetMethod("Clear");
                MI.Invoke(Childs, null);
            }
            else
            {
                foreach (RowContainer RC in newTD.RowContainers)
                {
                    DataProvider changeChild =
                        GetNodes().FirstOrDefault(q => q.Id == RC.Id);
                    //добавление нового объекта для строки в коллекцию
                    if (changeChild == null)
                    {
                        DataProvider newChild =
                            (DataProvider)Activator.CreateInstance(ChildType);
                        newChild.SetDataForModify(db, RC, this);
                        MethodInfo MI = Childs.GetType().GetMethod("Add");
                        MI.Invoke(Childs, new object[] { newChild });
                    }
                    else//изменение строки таблицы
                    {
                        changeChild.SetDataForModify(db, RC, this);
                        db.Entry(changeChild).State = EntityState.Modified;
                    }
                }
                //удаление строк
                IEnumerable <DataProvider> delChilds =
                    GetNodes().Where(q => !newTD.RowContainers
                                     .Any(w => w.Id == q.Id));
                foreach (DataProvider delChild in delChilds)
                {
                    MethodInfo MI = Childs.GetType().GetMethod("Remove");
                    MI.Invoke(Childs, new object[] { delChild });
                }
            }
            //если после удаления шаблона остался файл с пустым шаблоном,
            //то удалить этот файл из таблицы шаблонов
            if (NodeType == TreeViewNodeType.Templates)
            {
                foreach (DB_File File in
                         db.DB_Files.Where(q => q.DB_Template == null))
                {
                    db.DB_Files.Remove(File);
                }
            }
            return(true);
        }