Beispiel #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);
        }
        //метод для установки Childs и ChildType
        public override void SetNodes()
        {
            StandartNode CheckingNode = new StandartNode(TreeViewNodeType.Checking,
                                                         null,
                                                         null);
            StandartNode SettingNode = new StandartNode(TreeViewNodeType.Setting,
                                                        null,
                                                        null);

            Childs = new List <DataProvider> {
                CheckingNode, SettingNode
            };
            ChildType = typeof(DataProvider);
        }
Beispiel #3
0
        //получить все узлы дерева
        public TreeViewNode GetTreeViewNode()
        {
            //корневой узел Клиенты
            StandartNode ClientsNode =
                new StandartNode(TreeViewNodeType.Clients,
                                 db.DB_Clients,
                                 typeof(DB_Client),
                                 true);
            TreeViewNode MainNode = ClientsNode.GetNode(++nodeId);

            //рекурсивное добавление подузлов
            AddTreeViewNodes(MainNode, ClientsNode.GetNodes());

            return(MainNode);
        }
Beispiel #4
0
        //метод для установки Childs и ChildType
        public override void SetNodes()
        {
            StandartNode TemplatesNode =
                new StandartNode(TreeViewNodeType.Templates,
                                 DB_Templates,
                                 typeof(DB_Template));
            StandartNode FilesNode =
                new StandartNode(TreeViewNodeType.Files,
                                 DB_Files,
                                 typeof(DB_File));

            Childs = new List <DataProvider> {
                TemplatesNode, FilesNode
            };
            ChildType = typeof(DataProvider);
        }
Beispiel #5
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);
        }