Удаление объекта из БД и combobox WPF

206
10 ноября 2018, 13:40

Ситуация следующая: у меня есть База данных(БД) 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 нет.

Answer 1

DepNamesBox.Items.Add(dr[1]); - заполнять контрол object'ами прямо в запросе не лучший подход. Отделите представление от бизнес-логики. Пусть sql-запрос возвращает список List<Departments>.Держите его в памяти и работайте только с ним. А дальше дело нескольких шагов:

1: Приводите ваш object из бокса к Department; 2: Удаляете элемент сначала из бд передав ему Department.id из п.1; 3: Удаляете из списка в памяти; 4: Очистите combobox и заново отдайте ему оставшиеся элементы списка.

Таким образом вы убьете двух зайцев: упростите поддержание вашего кода и облегчите себе работу с данными.

READ ALSO
Выводить исключения в stderr

Выводить исключения в stderr

Подскажите пожалуйстаИсключения (exceptions) в C# по умолчанию выводятся в stdout, мне нужно их выводить в stderr (чтобы потом обработать только поток...

226
Есть ли скрипт для скачивание с google play?

Есть ли скрипт для скачивание с google play?

Как можно скачивать приложение с гугл плей через php скрипт? это нужно что бы отдавать готовый файл пользователям

197
Laravel подстановка маршрута

Laravel подстановка маршрута

Как в Laravel использовать подстановку маршрутаНапример:$route['category/(:any)/page/(:num)'] = '/category/page/$1/$2';

237
Как сделать выборку MySQL?

Как сделать выборку MySQL?

Имеются две таблицы: slider_media slider_slides

238