public MainCriterionMethodResult FindDecision(Model model, TId mainCriterionId) { // Сюда приходит модель с уже отсеянными по // критериальным ограничениям экспериментами // Остается только отсортировать их по // главному критерию var result = new MainCriterionMethodResult("Метод главного критерия", mainCriterionId); List <SortableDouble> sortedExperiments = model.Experiments.Values.Select <Experiment, SortableDouble>( e => new SortableDouble() { Direction = model.Criteria[mainCriterionId].SortDirection, Id = e.Id, Value = e.CriterionValues[mainCriterionId] } ).ToList(); sortedExperiments.Sort(); foreach (SortableDouble sortedExperiment in sortedExperiments) { result.SortedPoints.Add(sortedExperiment.Id); } return(result); }
public static void FillDataGrid( Model model, MainCriterionMethodResult result, DataGridView table, bool showInactiveExperiments) { table.SuspendLayout(); table.Rows.Clear(); table.Columns.Clear(); // Подготовим некоторые значения для отображения Color activeTextColor = Color.Black; Color inactiveTextColor = Color.DimGray; Color mainCriterionColumnColor = Color.PowderBlue; // Колонки для параметров foreach (KeyValuePair <TId, Parameter> kvp in model.Parameters) { var paramCol = new DataGridViewColumn(); paramCol.CellTemplate = new DataGridViewTextBoxCell(); paramCol.SortMode = DataGridViewColumnSortMode.NotSortable; paramCol.HeaderText = kvp.Value.Name; paramCol.Name = "param_" + kvp.Key; paramCol.HeaderCell.ToolTipText = kvp.Value.GetDescription(); table.Columns.Add(paramCol); } // Колонки для критериев foreach (KeyValuePair <TId, Criterion> kvp in model.Criteria) { var critCol = new DataGridViewColumn(); critCol.CellTemplate = new DataGridViewTextBoxCell(); critCol.SortMode = DataGridViewColumnSortMode.NotSortable; critCol.HeaderText = kvp.Value.Name; critCol.Name = "crit_" + kvp.Key; critCol.HeaderCell.ToolTipText = kvp.Value.GetDescription(); if (kvp.Key == result.MainCriterionId) { critCol.CellTemplate.Style.BackColor = mainCriterionColumnColor; } table.Columns.Add(critCol); } // Колонки для функциональных ограничения foreach (KeyValuePair <TId, Constraint> kvp in model.FunctionalConstraints) { var constrCol = new DataGridViewColumn(); constrCol.CellTemplate = new DataGridViewTextBoxCell(); constrCol.SortMode = DataGridViewColumnSortMode.NotSortable; constrCol.HeaderText = kvp.Value.Name; constrCol.Name = "constr_" + kvp.Key; constrCol.HeaderCell.ToolTipText = kvp.Value.GetDescription(); table.Columns.Add(constrCol); } foreach (TId expId in result.SortedPoints) { // Использовал ИЛИ потому что: // isActive| 0 | 1 | // show... |_____|_____| // 0 | 0 | 1 | // 1 | 1 | 1 | if (model.Experiments[expId].IsActive || showInactiveExperiments) { // Добавим рядок int rowInd = table.Rows.Add(); // Запишем в хедер номер эксперимента table.Rows[rowInd].HeaderCell.Value = model.Experiments[expId].Number.ToString(); // Выберем цвет Color textColor = activeTextColor; if (!model.Experiments[expId].IsActive) { textColor = inactiveTextColor; } // Запишем в ячейки значения оптимизируемых параметров foreach (KeyValuePair <TId, double> pvs in model.Experiments[expId].ParameterValues) { int colInd = 0; try { colInd = table.Columns["param_" + pvs.Key].Index; } catch (Exception ex) { MessageBoxHelper.ShowError(ex.Message); return; } table[colInd, rowInd].Value = pvs.Value.ToString(SettingsManager.Instance.DoubleStringFormat); table[colInd, rowInd].Style.ForeColor = textColor; } // Запишем в ячейки значения критериев оптимальности foreach (KeyValuePair <TId, double> pvs in model.Experiments[expId].CriterionValues) { int colInd = 0; try { colInd = table.Columns["crit_" + pvs.Key].Index; } catch (Exception ex) { MessageBoxHelper.ShowError(ex.Message); return; } table[colInd, rowInd].Value = pvs.Value.ToString(SettingsManager.Instance.DoubleStringFormat); table[colInd, rowInd].Style.ForeColor = textColor; } // Запишем в ячейки значения ФО foreach (KeyValuePair <TId, double> pvs in model.Experiments[expId].ConstraintValues) { int colInd = 0; if (table.Columns["constr_" + pvs.Key] != null) { colInd = table.Columns["constr_" + pvs.Key].Index; table[colInd, rowInd].Value = pvs.Value.ToString(SettingsManager.Instance.DoubleStringFormat); table[colInd, rowInd].Style.ForeColor = textColor; } } } } table.ResumeLayout(); }