Ситуация следующая:
у меня есть База данных(БД) Department у этой БД два поля id и DepName. Задача: по нажатию кнопки "Удалить" - удалить объект из БД Department и combobox
Заполняю comboboxтак:
try
{
connection = new SqlConnection(connectionDb);
connection.Open();
SqlCommand command = new SqlCommand("SELECT Id, DepName FROM Department", connection);
SqlDataReader dr = command.ExecuteReader();
while (dr.Read())
{
DepNamesBox.Items.Add(dr[1]);
}
dr.Close();
command.ExecuteNonQuery();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
SQL Команда на удаление:
#region DeleteFunctionDep
Query = "DELETE FROM Department WHERE ID = @ID";
command = new SqlCommand(Query, connection);
parameter = command.Parameters.Add("@ID", SqlDbType.Int, 0, "ID");
adapter.DeleteCommand = command;
#endregion
"Button":
DataRowView drv = (DataRowView)DepNamesBox.SelectedItem;
drv.Row.Delete();
adapter.Update(dt);
В итоге ошибка: System.InvalidCastException: "Не удалось привести тип объекта "System.String" к типу "System.Data.DataRowView"."
Подскажите, пожалуйста, как правильно удалить объект из БД и combobox или к какому типу привести DepNamesBox.SelectedItem?
P.S. с Listview удалить объект получилось такой командой, а с combobox нет.
DepNamesBox.Items.Add(dr[1]); - заполнять контрол object'ами прямо в запросе не лучший подход.
Отделите представление от бизнес-логики.
Пусть sql-запрос возвращает список List<Departments>.Держите его в памяти и работайте только с ним. А дальше дело нескольких шагов:
1: Приводите ваш object из бокса к Department;
2: Удаляете элемент сначала из бд передав ему Department.id из п.1;
3: Удаляете из списка в памяти;
4: Очистите combobox и заново отдайте ему оставшиеся элементы списка.
Таким образом вы убьете двух зайцев: упростите поддержание вашего кода и облегчите себе работу с данными.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости