БД «Личные данные о студентах». КурсовойПроект Левашов В.Б. ИВТз-171. Программное приложение с базой данных Личные данные о студентах
Скачать 1.16 Mb.
|
3.3 Функции “Добавить/Изменить/Удалить строку”Ещё одна возможность, которая дана пользователю – это добавление, изменение и удаление строки из таблицы, выделено красным прямоугольником (рисунок 3.3). Рисунок 3.2 – Добавление, изменение и удаление строк Данная функция представляет собой столбец “Действие” добавленное в компонент dataGridView при помощи метода LoadData и находящаяся в последнем столбце каждой таблицы. Столбец “Действие”(функция внесения, удаления, изменения данных) работает при помощи написанного кода в событиях CellContentClick, UserAddedRow, CellValueChanged компонента dataGridView и двух методах LoadData и ReloadData. Для обеспечения работы этих событий был написан код программы использующий цикл try-catch. Именно данный код и реализует данные функции. Однако прежде чем смотреть код программы представлю код метода загрузки данных в dataGridView: private void LoadData() { try { sqlDataAdapter = new SqlDataAdapter("SELECT *, 'Delete' AS [Действие] FROM [Факультеты]", sqlConnection); sqlBuilder = new SqlCommandBuilder(sqlDataAdapter); sqlBuilder.GetInsertCommand(); sqlBuilder.GetUpdateCommand(); sqlBuilder.GetDeleteCommand(); dataSet = new DataSet(); sqlDataAdapter.Fill(dataSet, "Факультеты"); dataGridView1.DataSource = dataSet.Tables["Факультеты"]; for (int i = 0; i < dataGridView1.Rows.Count; i++) { DataGridViewLinkCell linkCell = new DataGridViewLinkCell(); dataGridView1[3, i] = linkCell; } dataGridView1.Columns[1].Width = 130; dataGridView1.Columns[2].Width = 160; dataGridView1.Columns[3].Width = 65; } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error); } } Метод загрузки данных LoadData необходим для того, чтобы внести данные из таблицы в компонент dataGridView, а так же добавить дополнительный столбец “Действие” с параметрами добавления, изменения, а так же удаления строк данных из таблицы БД. Далее реализован метод перезагрузки данных в таблице ReloadData и текст кода написанный для него: private void ReloadData() { try { dataSet.Tables["Факультеты"].Clear(); sqlDataAdapter.Fill(dataSet, "Факультеты"); dataGridView1.DataSource = dataSet.Tables["Факультеты"]; for (int i = 0; i < dataGridView1.Rows.Count; i++) { DataGridViewLinkCell linkCell = new DataGridViewLinkCell(); dataGridView1[3, i] = linkCell; } } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error); } } Далее идёт событие CellContentClick, которое обрабатывает любые нажатия на ячейку и где определили какие действия хочет произвести пользователь над таблицей, т.е. на основе действий в колонке “Действие” отображается вариант Insert/Update/Delete: private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { try { if (e.ColumnIndex == 3) { string task = dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString(); if (task == "Delete") { if (MessageBox.Show("Удалить эту строку?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { int rowIndex = e.RowIndex; dataGridView1.Rows.RemoveAt(rowIndex); dataSet.Tables["Факультеты"].Rows[rowIndex].Delete(); sqlDataAdapter.Update(dataSet, "Факультеты"); } } else if (task == "Insert") { int rowIndex = dataGridView1.Rows.Count - 2; DataRow row = dataSet.Tables["Факультеты"].NewRow(); row["Код_факультета"] = dataGridView1.Rows[rowIndex].Cells["Наименование"].Value; row["Название_факультета"] = dataGridView1.Rows[rowIndex].Cells["Название_факультета"].Value; row["Число_мест_на_факультете"] = dataGridView1.Rows[rowIndex].Cells["Число_мест_на_факультете"].Value; dataSet.Tables["Факультеты"].Rows.Add(row); dataSet.Tables["Факультеты"].Rows.RemoveAt(dataSet.Tables["Факультеты"].Rows.Count - 1); dataGridView1.Rows.RemoveAt(dataGridView1.Rows.Count - 2); dataGridView1.Rows[e.RowIndex].Cells[3].Value = "Delete"; sqlDataAdapter.Update(dataSet, "Факультеты"); newRowAdding = false; } else if (task == "Update") { int r = e.RowIndex; dataSet.Tables["Факультеты"].Rows[r]["Код_факультета"] = dataGridView1.Rows[r].Cells["Код_факультета"].Value; dataSet.Tables["Факультеты"].Rows[r]["Название_факультета"] = dataGridView1.Rows[r].Cells["Название_факультета"].Value; dataSet.Tables["Факультеты"].Rows[r]["Число_мест_на_факультете"] = dataGridView1.Rows[r].Cells["Число_мест_на_факультете"].Value; sqlDataAdapter.Update(dataSet, "Факультеты"); dataGridView1.Rows[e.RowIndex].Cells[3].Value = "Delete"; } ReloadData(); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error); } } Событие UserAddedRow предназначено для того чтобы обрабатывать событие добавления новой строки, т.е. для того чтобы работала команда “Insert” , так же был написан код реализованный через цикл try-catch. private void dataGridView1_UserAddedRow(object sender, DataGridViewRowEventArgs e) { try { if (newRowAdding == false) { newRowAdding = true; int lastRow = dataGridView1.Rows.Count - 2; DataGridViewRow row = dataGridView1.Rows[lastRow]; DataGridViewLinkCell linkCell = new DataGridViewLinkCell(); dataGridView1[3, lastRow] = linkCell; row.Cells["Действие"].Value = "Insert"; } } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error); } } Так же было добавлено событие CellValueChanged для отслеживания изменений в ячейках и работоспособности команды “Update”. Так же реализованное циклом try-catch. private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) { try { if (newRowAdding == false) { int rowIndex = dataGridView1.SelectedCells[0].RowIndex; DataGridViewRow editingRow = dataGridView1.Rows[rowIndex]; DataGridViewLinkCell linkCell = new DataGridViewLinkCell(); dataGridView1[3, rowIndex] = linkCell; editingRow.Cells["Действие"].Value = "Update"; } } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error); } } 3.4 Функция “Обновить” Так же реализована функция обновления таблицы, т.е. компонента dataGridView. Реализована она следующим образом: private void toolStripButton1_Click(object sender, EventArgs e) { ReloadData(); } Метод ReloadData() перезагружает таблицу “Факультет” в компоненте dataGridView, тем самым обновляя его. |