//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); }
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); } }