Ejemplo n.º 1
0
        //получить таблицу для текущего выбранного узла
        public virtual TableData_Server GetTableData(ApplicationContext db,
                                                     int nodeId)
        {
            if (NodeType == TreeViewNodeType.Checking ||
                NodeType == TreeViewNodeType.Setting)
            {
                return(GetTableDataForPluginParameters(nodeId));
            }
            if (ChildType == null)
            {
                return(null);
            }
            object ChildObject = Activator.CreateInstance(ChildType);

            if (ChildObject == null)
            {
                return(null);
            }
            DataProvider newChild = (DataProvider)ChildObject;

            newChild.SetPropertyForGetTableData(db, this);
            List <CellContainer> HeaderCellContainer = newChild.GetCellContainers();

            if (HeaderCellContainer == null || HeaderCellContainer.Count == 0)
            {
                return(null);
            }

            List <RowContainer> RowContainers = new List <RowContainer>();

            foreach (DataProvider Child in GetNodes())
            {
                Child.SetPropertyForGetTableData(db, this);
                List <CellContainer> ValueCellContainer = Child.GetCellContainers();
                if (ValueCellContainer == null &&
                    ValueCellContainer.Count == 0)
                {
                    return(null);
                }
                RowContainer RC = new RowContainer(Child.Id, ValueCellContainer);
                RowContainers.Add(RC);
            }
            string           TableName = TreeViewNodeInfos[NodeType].TableName;
            TableData_Server TDS       =
                new TableData_Server(nodeId,
                                     TableName,
                                     HeaderCellContainer,
                                     true,
                                     RowContainers);

            return(TDS);
        }
Ejemplo n.º 2
0
        //модификация базы данных, если текущий узел - это Настройки или Проверки плагина
        public virtual bool ModifyForPluginParameters(ApplicationContext db,
                                                      TableData_Server newTD)
        {
            DB_Plugin Plugin = (DB_Plugin)ParentNode;

            List <AddInsParameter> AddInsParameters = new List <AddInsParameter>();
            List <RowContainer>    RowContainers    = newTD.RowContainers;

            for (int i = 0; i < RowContainers.Count; i++)
            {
                RowContainer RC = RowContainers[i];
                foreach (CellContainer CC in RC.ValueCellContainer)
                {
                    AddInsParameter Parameter = new AddInsParameter();
                    Parameter.TableName      = newTD.tableName;
                    Parameter.InTable        = newTD.bAddNewRow;
                    Parameter.RowIndex       = i;
                    Parameter.Value          = CC.value;
                    Parameter.VisibleName    = CC.CI.headerName;
                    Parameter.PropertyName   = CC.CI.headerPropName;
                    Parameter.ErrorMessage   = "";
                    Parameter.ColumnIndex    = CC.CI.columnIndex;
                    Parameter.ControlType    = CC.CI.ColumnType;
                    Parameter.AvailableValue = CC.CI.comboboxData.ToArray();
                    AddInsParameters.Add(Parameter);
                }
            }
            string SerializeValue = JsonConvert.SerializeObject(AddInsParameters);

            if (SerializeValue == null || SerializeValue == "")
            {
                return(false);
            }

            if (NodeType == TreeViewNodeType.Checking)
            {
                Plugin.CheckingData = SerializeValue;
            }
            if (NodeType == TreeViewNodeType.Setting)
            {
                Plugin.SettingData = SerializeValue;
            }

            return(true);
        }
        //перевод данных в формат, удобный на сервере
        public TableData_Server TransformToServer()
        {
            List <CellContainer> HeaderCellContainer =
                new List <CellContainer>();

            for (int i = 0; i < columnData.Count; i++)
            {
                ColumnData CD = columnData[i];
                CellInfo   CI = new CellInfo(CD.headerName,
                                             CD.headerPropName,
                                             (ControlType)CD.type,
                                             i,
                                             CD.comboboxData);
                CellContainer CC =
                    new CellContainer(CD.defVal, CI);
                HeaderCellContainer.Add(CC);
            }
            List <RowContainer> RowContainers = new List <RowContainer>();

            for (int x = 0; x < rowIds.Count; x++)
            {
                List <CellContainer> ValueCellContainer =
                    new List <CellContainer>();
                for (int y = 0; y < columnData.Count; y++)
                {
                    CellInfo      CI    = HeaderCellContainer[y].CI;
                    string        value = columnData[y].rowVals[x].value;
                    CellContainer CC    = new CellContainer(value, CI);
                    ValueCellContainer.Add(CC);
                }
                RowContainer RC = new(rowIds[x], ValueCellContainer);
                RowContainers.Add(RC);
            }
            TableData_Server TDS =
                new TableData_Server(selectedId,
                                     tableName,
                                     HeaderCellContainer,
                                     bAddNewRow,
                                     RowContainers);

            return(TDS);
        }
        //получить данные для таблицы выбранного узла
        public TableData_Client GetAllTableData()
        {
            if (currNode == null)
            {
                return(null);
            }

            TreeViewNodeInfo CurrNodeInfo = currNode.NodeInfo;

            if (CurrNodeInfo.hasTableData == false)
            {
                return(null);
            }

            TableData_Server TDS =
                currNode.NodeProvider.GetTableData(db, selectedId);

            if (TDS == null)
            {
                return(null);
            }

            return(TDS.TransformToClient());
        }
Ejemplo n.º 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);
        }