Я не уверен, что полностью понял вашу проблему, но ваша проблема может заключаться в том, что datagridview генерирует столбцы автоматически. См .: DataGridView.AutoGenerateColumns
Вместо того, чтобы делать SELECT * FROM
, лучше выбрать только те поля, которые вам нужны. Если в будущем вы добавите больше полей в таблицу, столбцы в сетке данных могут быть смещены, поскольку они не в определенном порядке.
Вместо добавления таблицы данных в форму во время выполнения:
EMPLOYEE_DEL_FRM.Controls.Add(OBJECT_DATAGRIDVIEW)
Я бы добавил его непосредственно в макет формы (чтобы вы могли видеть его во время разработки), а затем настроил его, привязав каждый столбец к полю базы данных. Внешний вид сетки будет более предсказуемым. Вот небольшое руководство: Как связать datatable / list с сеткой данных с заголовками? Использование AutoGenerateColumns
не очень хорошая идея, потому что это покажет все столбцы (обычно нежелательно) и не обязательно в Порядок, который вы хотите.
Другие замечания:
Записи могут быть отредактированы или удалены непосредственно в виде сетки данных, просто выбрав одну или несколько строк и нажав клавишу Del. Затем просто вызовите DataAdapter, чтобы зафиксировать изменения в базе данных. Вы не должны даже делать DELETE FROM
. Просто позвольте пользователю использовать datagridview. Преимущество состоит в том, что если пользователь допустил ошибку, вы можете откатить изменения, потому что вы используете данные. Здесь вы удаляете сразу и без предупреждения.
Не делайте такие вещи, как:
SQL_CMD_TXT = "DELETE FROM `employees` WHERE (`EMPLOYEE_ID` ='" &
EMPLOYEE_DEL_FRM.DEL_ID_TXT.Text & "'); SELECT * FROM `employees`;"
Используйте параметризованные запросы вместо , этот код небезопасно и может подавиться одинарными кавычками или специальными символами (попробуйте!). Вот простой пример: FAQ: Как сделать параметризованный запрос в базе данных с помощью VB. NET? . Пожалуйста, используйте параметризованные запросы с этого момента, не развивайте вредных привычек , которые всегда будут кусать вас рано или поздно. Один только риск безопасности слишком высок.
Также мне интересно, почему вы сделали сложенных запросов . Было бы лучше отделить SELECT от DELETE.
В этом коде переменная sql
не нужна:
With cmd
sql = SQL_CMD_TXT
.Connection = con
.CommandText = sql
End With
Просто используйте SQL_CMD_TXT напрямую. В противном случае это усложнит выполнение кода.