/// <summary> /// Изменение таблицы судоку по данным /// </summary> /// <param name="editCellSudoku"></param> public void ResetTableSudoku(EditCellSudoku editCellSudoku) { DataGridSudoku.BeginInit(); if (editCellSudoku != null) { ((ItemCellSudoku)dataTableSudoku.Rows[editCellSudoku.Row][editCellSudoku.Column]).ResetItem(editCellSudoku.Simbol); for (int row = 0; row < dataTableSudoku.Rows.Count; row++) { for (int column = 0; column < dataTableSudoku.Columns.Count; column++) { var item = ((ItemCellSudoku)dataTableSudoku.Rows[row][column]); } } List <char> AllSimbols = new List <char>(); for (char ch = '1'; ch < '1' + 9; ch++) { AllSimbols.Add(ch); } foreach (var listItemSudoku in ListItemSudokus) { foreach (var simbol in AllSimbols) { ListItemSudoku listItemSudokus = new ListItemSudoku(); List <ItemSudoku> itemSudokus = new List <ItemSudoku>(); foreach (var itemSudoku in listItemSudoku.ItemSudokus) { var item = itemSudoku; if (item.ItemCellSudoku.Can.Contains(simbol)) { itemSudokus.Add(item); } } listItemSudokus.ItemSudokus = itemSudokus; var k = ListItemSudokus.Where(x => x.Contains(listItemSudokus)).ToList(); if (itemSudokus != null && k.Count > 1 && itemSudokus.Count > 0) { //Которые надо изменить var kk = k.Select(x => x.ItemSudokus.Where(y => !itemSudokus.Contains(y)).ToList()).ToList(); foreach (var item1 in kk) { foreach (var item2 in item1) { item2.ItemCellSudoku.Can.Remove(simbol); } } } } } } DataGridSudoku.EndInit(); }
public bool Contains(object obj) { if (obj is ListItemSudoku) { ListItemSudoku listItemSudoku = (ListItemSudoku)obj; if (ItemSudokus.Count < listItemSudoku.ItemSudokus.Count) { return false; } foreach (var itemSudoku in listItemSudoku.ItemSudokus) { if (!ItemSudokus.Contains(itemSudoku)) { return false; } } return true; } return false; }
public override bool Equals(object obj) { if (obj is ListItemSudoku) { ListItemSudoku listItemSudoku = (ListItemSudoku)obj; if (ItemSudokus.Count!= listItemSudoku.ItemSudokus.Count) { return false; } foreach (var itemSudoku in ItemSudokus) { if(!listItemSudoku.ItemSudokus.Contains(itemSudoku)) { return false; } } return true; } return false; }
/// <summary> /// Первоначальное создание таблицы /// </summary> private void NewTable() { int numSudoku = 9; for (int i = 0; i < numSudoku; i++) { dataTableSudoku.Columns.Add($"{i}", typeof(object)); } for (int i = 0; i < numSudoku; i++) { var newRow = dataTableSudoku.NewRow(); for (int j = 0; j < numSudoku; j++) { //TODO: это объединить newRow[j] = new ItemCellSudoku(' '); } dataTableSudoku.Rows.Add(newRow); } for (int i = 0; i < numSudoku; i++) { ListItemSudoku listItemSudokuRow = new ListItemSudoku(); ListItemSudoku listItemSudokuColumn = new ListItemSudoku(); ListItemSudoku listItemTable = new ListItemSudoku(); for (int j = 0; j < numSudoku; j++) { int row = i; int col = j; listItemSudokuRow.ItemSudokus.Add(new ItemSudoku(dataTableSudoku, row, col)); row = j; col = i; listItemSudokuColumn.ItemSudokus.Add(new ItemSudoku(dataTableSudoku, row, col)); col = (i / 3) * 3 + j / 3; row = (i % 3) * 3 + j % 3; listItemTable.ItemSudokus.Add(new ItemSudoku(dataTableSudoku, col, row)); } ListItemSudokus.Add(listItemSudokuRow); ListItemSudokus.Add(listItemSudokuColumn); ListItemSudokus.Add(listItemTable); } for (int i = 0; i < numSudoku; i++) { for (int j = 0; j < numSudoku; j++) { var z = ListItemSudokus.Where(x => x.FindRowColumn(i, j)).ToList(); ((ItemCellSudoku)dataTableSudoku.Rows[i][j]).ListItemSudokus = z; } } DataGridSudoku.ItemsSource = dataTableSudoku.DefaultView; DataGridSudoku.CanUserAddRows = false; DataGridSudoku.CanUserResizeColumns = false; DataGridSudoku.CanUserDeleteRows = false; DataGridSudoku.CanUserResizeRows = false; DataGridSudoku.CanUserReorderColumns = false; DataGridSudoku.CanUserSortColumns = false; }