//получить таблицу для текущего выбранного узла 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); }
//модификация базы данных, если текущий узел - это Настройки или Проверки плагина 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()); }
//модификация базы данных 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); }