Esempio n. 1
0
        //private static Random Random = new Random();

        private CellToChange SelectNextCellToChange(BoardRule rules)
        {
            CellToChange cellWithLessPossibilities = null;

            foreach (var cell in Cells)
            {
                if (!cell.CurrentNumber.HasValue)
                {
                    var possibleNumbers = rules.GetPossibleNumbers(this, cell);

                    if (cellWithLessPossibilities == null || cellWithLessPossibilities.PossibleNumbers.Length > possibleNumbers.Length)
                    {
                        cellWithLessPossibilities = new CellToChange()
                        {
                            Cell            = cell,
                            PossibleNumbers = possibleNumbers
                        };
                    }

                    // Shortcut to not process cells when there's a best one already
                    // Has the drawback of not identifying cells with 0 possibilities if there's a cell with 1 before
                    if (cellWithLessPossibilities.PossibleNumbers.Length <= 1)
                    {
                        return(cellWithLessPossibilities);
                    }
                }
            }

            return(cellWithLessPossibilities);
        }
Esempio n. 2
0
        private void DataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            DataGridView dgv  = (DataGridView)sender;
            CellToChange cell = new CellToChange()
            {
                ColumnName = dgv.Columns[e.ColumnIndex].Tag.ToString(),
                Value      = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString().Replace(",", "."),
                RowIndex   = e.RowIndex
            };

            #region Определим к какой таблице в БД принадлежит ячейка.
            if (dgv.Name == wbpGrid.Name)
            {
                switch (e.ColumnIndex)
                {
                case 1:
                case 2:
                case 8:
                case 9:
                    cell.TableName = "InputData";
                    break;

                case 16:
                case 17:
                    cell.TableName = "GatewaySchedule";
                    break;

                default:
                    cell.TableName = "OutputData";
                    break;
                }
            }
            if (dgv.Name == wbcGrid.Name)
            {
                switch (e.ColumnIndex)
                {
                case 1:
                case 4:
                case 9:
                    cell.TableName = "InputData";
                    break;

                case 11:
                case 12:
                    cell.TableName = "GatewaySchedule";
                    break;

                default:
                    cell.TableName = "OutputData";
                    break;
                }
            }
            if (dgv.Name == sbpGrid.Name)
            {
                switch (e.ColumnIndex)
                {
                case 8:
                case 9:
                    cell.TableName = "GatewaySchedule";
                    break;

                default:
                    cell.TableName = "OutputData";
                    break;
                }
            }
            if (dgv.Name == sbcGrid.Name)
            {
                switch (e.ColumnIndex)
                {
                case 4:
                    cell.TableName = "InputData";
                    break;

                case 5:
                case 6:
                    cell.TableName = "GatewaySchedule";
                    break;

                default:
                    cell.TableName = "OutputData";
                    break;
                }
            }

            #endregion

            int shift = 0;

            switch (cell.TableName)
            {
            case "InputData": shift = 5; break;

            case "GatewaySchedule": shift = 4; break;

            case "OutputData": shift = 3; break;
            }

            cell.ID = dgv.Rows[e.RowIndex].Cells[dgv.ColumnCount - shift].Value.ToString();

            if (cellsToChange.Exists(x => x.ID.Equals(cell.ID)))
            {
                cellsToChange[cellsToChange.FindIndex(ind => ind.ID.Equals(cell.ID))] = cell;
            }
            else
            {
                cellsToChange.Add(cell);
            }
        }