Пример #1
0
        public static void FillMidDataGrid(
            Model model,
            DataGridView grid,
            ScMethodResult result,
            CriterialConcessions concessions,
            TId sortingCritId,
            bool showConstraints,
            bool showParams)
        {
            grid.SuspendLayout();

            // Очистка
            grid.Columns.Clear();
            grid.Rows.Clear();

            // Колонка для номера эксперимента
            var numberCol = new DataGridViewColumn();

            numberCol.SortMode     = DataGridViewColumnSortMode.NotSortable;
            numberCol.HeaderText   = "Номер эксперимента";
            numberCol.Name         = "num";
            numberCol.CellTemplate = new DataGridViewTextBoxCell();
            numberCol.CellTemplate.Style.BackColor = Color.LightGray;
            grid.Columns.Add(numberCol);
            // Колонки для значений критериев
            foreach (CriterialConcession concession in concessions)
            {
                Criterion crit = model.Criteria[concession.CriterionId];
                // вспомогательная строка для заголовка колонки критерия
                string sortString = SortDirectionManager.GetSortDirectionName(crit.SortDirection);

                // Колонка для значений критерия
                var critCol = new DataGridViewColumn();
                critCol.CellTemplate           = new DataGridViewTextBoxCell();
                critCol.SortMode               = DataGridViewColumnSortMode.NotSortable;
                critCol.HeaderText             = crit.Name + "\n" + sortString;
                critCol.Name                   = "crit_" + crit.Id;
                critCol.HeaderCell.ToolTipText = crit.GetDescription();
                // Отметим цветом колонку того критерия, по которому сделана сортировка
                if (crit.Id == sortingCritId)
                {
                    critCol.CellTemplate.Style.BackColor = Color.Aqua;
                }
                grid.Columns.Add(critCol);
            }
            // Если надо - колонки для функциональных ограничения
            if (showConstraints)
            {
                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();
                    grid.Columns.Add(constrCol);
                }
            }
            // Если надо - колонки для параметров
            if (showParams)
            {
                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();
                    grid.Columns.Add(paramCol);
                }
            }



            // Создадим рядки и заполним их инфой

            // Будем выводить эксперименты согласно порядку, указанному в
            // полученном результате вычислений (result)
            foreach (TId expId in result.SortedPoints)
            {
                int    rowId   = grid.Rows.Add();
                string colName = string.Empty;
                int    colId   = -1;
                // Сначала номер эксперимента
                grid[0, rowId].Value =
                    model.Experiments[expId].Number.ToString();
                // Потом - значения критериев
                foreach (CriterialConcession concession in concessions)
                {
                    Criterion crit = model.Criteria[concession.CriterionId];
                    colName = "crit_" + crit.Id;
                    colId   = grid.Columns[colName].Index;
                    grid[colId, rowId].Value = model.Experiments[expId].CriterionValues[crit.Id].ToString(SettingsManager.Instance.DoubleStringFormat);
                }
                // Потом - если надо - ФО
                if (showConstraints)
                {
                    foreach (Constraint constr in model.FunctionalConstraints.Values)
                    {
                        colName = "constr_" + constr.Id;
                        colId   = grid.Columns[colName].Index;
                        grid[colId, rowId].Value = model.Experiments[expId].ConstraintValues[constr.Id].ToString(SettingsManager.Instance.DoubleStringFormat);
                    }
                }
                // И наконец - если нужно - оптимизируемые параметры
                if (showParams)
                {
                    foreach (Parameter param in model.Parameters.Values)
                    {
                        colName = "param_" + param.Id;
                        colId   = grid.Columns[colName].Index;
                        grid[colId, rowId].Value = model.Experiments[expId].ParameterValues[param.Id].ToString(SettingsManager.Instance.DoubleStringFormat);
                    }
                }
            }

            grid.ResumeLayout();
            // Конец метода
        }