//получить таблицу для текущего выбранного узла 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); }
TableData_Server GetTableDataAsTableType( List <AddInsParameter> ParameterList, int nodeId, string TableName) { ParameterList = ParameterList.OrderBy(q => q.RowIndex).ToList(); int oldRowIndex = ParameterList[0].RowIndex; List <CellContainer> CellContainers = new List <CellContainer>(); List <RowContainer> RowContainers = new List <RowContainer>(); for (int i = 0; i < ParameterList.Count; i++) { AddInsParameter Parameter = ParameterList[i]; int newRowIndex = Parameter.RowIndex; CellContainer CC = GetCellContainer(ParameterList[i], Parameter.ColumnIndex); if (oldRowIndex == newRowIndex) { CellContainers.Add(CC); } if (oldRowIndex != newRowIndex || i == ParameterList.Count - 1) { RowContainer RC = new RowContainer(0, CellContainers); RowContainers.Add(RC); if (i != ParameterList.Count - 1) { CellContainers = new List <CellContainer>(); CellContainers.Add(CC); } } oldRowIndex = newRowIndex; } //проверка, что во всех строках равное число столбцов int CellCount = RowContainers[0].ValueCellContainer.Count(); bool CellCountValid = RowContainers.Any(q => q.ValueCellContainer.Count != CellCount); if (CellCountValid) { return(null); } return(new TableData_Server(nodeId, TableName, RowContainers[0].ValueCellContainer, true, RowContainers)); }
//модификация базы данных, если текущий узел - это Настройки или Проверки плагина 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); }
TableData_Server GetTableDataAsNotTableType( List <AddInsParameter> ParameterList, int nodeId, string TableName) { List <CellContainer> CellContainers = new List <CellContainer>(); for (int i = 0; i < ParameterList.Count; i++) { CellContainer CC = GetCellContainer(ParameterList[i], i); CellContainers.Add(CC); } RowContainer RC = new RowContainer(0, CellContainers); return(new TableData_Server(nodeId, TableName, CellContainers, false, new List <RowContainer> { RC })); }
//установить данные объекта для модификации БД public bool SetDataForModify(ApplicationContext db, RowContainer RC, DataProvider ParentNode) { int nSetVal = 0; RC.ValueCellContainer.ForEach(Cell => { foreach (PropertyInfo PI in GetType().GetProperties()) { //перебор атрибутов (false - без родителей) foreach (ColumnAttribute Column in PI.GetCustomAttributes <ColumnAttribute>(false)) { //поиск по имени атрибута if (Column.headerPropName == Cell.CI.headerPropName) { //установить значение свойства PI.SetValue(this, Cell.value); nSetVal++; } } } }); if (RC.ValueCellContainer.Count != nSetVal) { return(false); } //установить специфические данные для строки таблицы bool bSet = SetSecificDataForModify(db, ParentNode); if (!bSet) { return(false); } return(true); }