@iviner

Как получить значение из datagrid в WPF?

Добрый день.
Как собственно получить значение из datagrid? Я хочу взять Id из выделенной строки и присвоить его переменной типа int, чтобы затем передать его в запрос для удаления. В базе Id также типа int. Само задание - создать что-то вроде домашней библиотеки, так что datagrid отображает книги.
private void ButtonDeleteBook_Click(object sender, RoutedEventArgs e)
        {
            HomeLibraryDatabaseEntities context = new HomeLibraryDatabaseEntities();
            try
            {
                int selectedId = ((Book)BookDG.SelectedItem).IdBook; 
                Book selectedBook = context.Book.Where(o => o.IdBook == selectedId ).Select(o => o).First();
                context.Book.Remove(selectedBook);
                context.SaveChanges();
                MessageBox.Show("Объект успешно удален");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

Book - это таблица в БД, а BookGD - datagrid, который отображает книги из таблицы Book. HomeLibraryDatabase - собственно название базы.
При выделении строки и нажатии кнопки "Удаление" выходит ошибка Unable to cast object of type 'System.Data.DataRowView' to type 'HomeLibrary.Book'.
  • Вопрос задан
  • 4668 просмотров
Пригласить эксперта
Ответы на вопрос 2
artem_b89
@artem_b89
Сетевой бездельник
Вообще странно... Как настроен источник данных грида?
Так?
<DataGrid ItemsSource="{Binding data}">

т.е. интересует тип коллекции и тип элементов коллекции
Ответ написан
yarosroman
@yarosroman Куратор тега C#
C# the best
во первых достаточно будет

int selected = ((Book)BookDG.SelectedItem)
context.Book.Remove(selectedBook);
context.SaveChanges();

MVVM и привязки вам помогут, достаточно сделать модель, в ней свойство, например, Selected, а в DataGrid написать, SelectedItem={Binding Selected, Mode=TwoWay}

и можно писать

context.Book.Remove(Selected);
context.SaveChanges();

Рекомендую SimpleMVVM, простой, для небольших проектов
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы