//перевод данных в формат, удобный на клиенте public TableData_Client TransformToClient() { List <ColumnData> CDs = new List <ColumnData>(); HeaderCellContainer = HeaderCellContainer.OrderBy(q => q.CI.columnIndex).ToList(); for (int i = 0; i < HeaderCellContainer.Count; i++) { IEnumerable <CellContainer> ValueContainers = RowContainers.Select(q => q.ValueCellContainer[i]); IEnumerable <string> values = ValueContainers.Select(q => q.value); List <TableDataCellValue> rowVals = values.Select(q => new TableDataCellValue(q)).ToList(); CellContainer HeaderContainer = HeaderCellContainer[i]; ColumnData CD = new ColumnData( (int)HeaderContainer.CI.ColumnType, HeaderContainer.CI.headerName, HeaderContainer.CI.headerPropName, HeaderContainer.value, rowVals, HeaderContainer.CI.comboboxData); CDs.Add(CD); } List <int> rowIds = RowContainers.Select(q => q.Id).ToList(); TableData_Client TDC = new TableData_Client(nodeId, tableName, bAddNewRow, CDs, rowIds); return(TDC); }
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 List <CellContainer> GetCellContainers() { List <CellContainer> CellContainers = new List <CellContainer>(); //словарь для выпадающего списка var DictCombobox = new Dictionary <string, List <string> >(); foreach (PropertyInfo PI in GetType().GetProperties()) { object oVal = PI.GetValue(this); //перебор атрибутов (false - без родителей) //заполнение колекций выпадающий списков foreach (ColumnComboboxDataAttribute ColumnCombobox in PI.GetCustomAttributes <ColumnComboboxDataAttribute>(false)) { if (oVal == null) { return(null); } List <string> ComboboxVals = (List <string>)oVal; if (ComboboxVals.Count == 0) { return(null); } string headerPropName = ColumnCombobox.headerPropName; if (DictCombobox.ContainsKey(headerPropName)) { continue; } DictCombobox.Add(headerPropName, ComboboxVals); } } foreach (PropertyInfo PI in GetType().GetProperties()) { object oVal = PI.GetValue(this); //перебор атрибутов (false - без родителей) //заполнение коллекции заголовков ячеек таблицы (HeaderCellContainer) foreach (ColumnAttribute Column in PI.GetCustomAttributes <ColumnAttribute>(false)) { CellContainer CC = GetCellContainer(Column, oVal, DictCombobox); CellContainers.Add(CC); } } return(CellContainers.OrderBy(q => q.CI.columnIndex).ToList()); }
//перевод данных в формат, удобный на сервере 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); }
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 })); }