// Удаление строки void RemoveRow() { var page = TabMain.SelectedTab; var grid = (DataGridView)page.Controls[0]; string table = page.Name.Split('_')[1]; /* Если выбелено более одной строки */ if (grid.SelectedRows.Count > 1) { // Получаем индексы выделенных ячеек int[] indexes = new int[grid.SelectedRows.Count]; for (int i = 0; i < grid.SelectedRows.Count; i++) { indexes[i] = grid.SelectedRows[i].Cells[0].Value.exToInt(); } if (new Remove(indexes, table, CheckMoreRelationships(table, indexes)).ShowDialog() == DialogResult.OK) { Base.RemoveRows(table, indexes); UpdateData(ROW_INDEX, true, true); // Обновление стобца } } /* Если выделена всего одна строка */ else { if (new Remove(CheckRelationships(table, ID)).ShowDialog() == DialogResult.OK) { try { switch (page.Name) { case "FPage_Estimate": Estimate.RemoveRow(ID); break; case "FPage_Trackinglists": Trackinglists.RemoveRow(ID); break; } UpdateData(ROW_INDEX, true); // Обновление стобца } catch (Exception e) { MessageBox.Show(e.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } bool CheckRelationships(string initialTable, int id) { DataTable checkingTable = new DataTable(); OleDbDataAdapter adapter; // Проверка связанных таблиц using (var connection = new OleDbConnection(Base.DB_CONNECTION_STRING)) { connection.Open(); // Выборка из БД, в зависимости от активной таблицы switch (page.Name) { case "FPage_Trackinglists": adapter = new OleDbDataAdapter($"SELECT * FROM Estimate WHERE Estimate_tracklist={id}", connection); adapter.Fill(checkingTable); break; } } if (checkingTable.Rows.Count != 0) { return(true); // Если есть строки то true } else { return(false); // Если нет строк то false } } bool CheckMoreRelationships(string initialTable, int[] values) { DataTable checkingTable = new DataTable(); OleDbDataAdapter adapter; #region Созданние строки запроса string CONDITION = ""; string CONDITION_COLUMN = "Estimate_tracklist"; for (int i = 0; i < values.Length; i++) { CONDITION += CONDITION_COLUMN + "=" + values[i] + " OR "; } CONDITION = CONDITION.Remove(CONDITION.Length - 4); #endregion // Проверка связанных таблиц using (var connection = new OleDbConnection(Base.DB_CONNECTION_STRING)) { connection.Open(); // Выборка из БД, в зависимости от активной таблицы switch (page.Name) { case "FPage_Trackinglists": adapter = new OleDbDataAdapter($"SELECT * FROM Estimate WHERE {CONDITION}", connection); adapter.Fill(checkingTable); break; } } if (checkingTable.Rows.Count != 0) { return(true); // Если есть строки то true } else { return(false); // Если нет строк то false } } }