コード例 #1
0
ファイル: MainForm.cs プロジェクト: Gitenax/TrackingApp
        // Удаление строки
        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
                }
            }
        }