С# WPF - влияет ли пакет materialdesign на функции сетки данных?

Я хочу отобразить выбранную строку из сетки данных в текстовые поля, поэтому я получил это видео: https://www.youtube.com/watch?time_continue=127&v=SDUt4y-H-nw. Я следовал этому шаг за шагом, но когда я тестировал его, он не работал (он не отображал данные из сетки данных в текстовые поля). Это мой код:

private void DGBookings_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            DataGrid dg = (DataGrid)sender;
            DataRowView row_selected = dg.SelectedItem as DataRowView;
            if (row_selected != null)
            {
                textBoxKlant.Text = row_selected["Naam"].ToString();
                dpIncheck.Text = row_selected["Incheckdatum"].ToString();
                dpUitcheck.Text = row_selected["Uitcheckdatum"].ToString();
                dpHotelLocatie.Text = row_selected["Hotel"].ToString();
                dpAantalPersonen.Text = row_selected["Aantal_personen"].ToString();
                dpMedewerker.Text = row_selected["medewerkerid"].ToString();
            }
        }

Я предполагаю, что это потому, что я использую пакет materialdesign... Может ли это быть правдой? Или это мой код? Если это мой код, не стесняйтесь давать предложения.

Ваш DataGrid привязан к источнику данных?

dotNET 21.05.2019 19:57

@dotNET это так DGBookings.ItemsSource = bookings;

portalstudent 21.05.2019 19:59

Да, я думал, что это будет так. Смотрите мой ответ.

dotNET 21.05.2019 20:00
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш DataGrid привязан к источнику данных. Если это так, следующая строка вызовет проблемы:

DataRowView row_selected = dg.SelectedItem as DataRowView;

Для связанных элементов управления SelectedItem относится к типу базового элемента коллекции, а не DataRowView. Таким образом, приведенная выше строка установит raw_selected в null, и следующий блок кода не будет выполняться. Вместо этого вы должны привести его к этому типу, а затем заполнить текстовые поля напрямую, используя свойства этого элемента.

Мое предложение для вас, чтобы узнать о MVVM. Уровень вашей виртуальной машины должен предоставлять свойство типа коллекции для привязки ItemSource к нему и другое свойство для привязки SelectedItem. Затем вы сможете использовать это второе свойство для привязки ваших текстовых полей. Нет необходимости использовать событие SelectionChanged. На самом деле в файле кода программной части Windows не будет абсолютно никакого пользовательского кода.

Редактировать

Если вы хотите придерживаться подхода обработки событий, все, что вам нужно сделать, это заменить приведенную выше строку на эту:

var row_selected = dg.SelectedItem as Booking;

Я предполагаю, что тип данных ваших элементов в коллекции bookingsBooking. Если это что-то другое, используйте это имя типа.

Можете ли вы привести пример с кодом, который я вам дал? Или вам нужно больше? Когда вы сможете это сделать, я отмечу ваш ответ;)

portalstudent 21.05.2019 20:05

Так это невозможно с Itemsource?

portalstudent 21.05.2019 20:07

@portalstudent: я ничего не знаю о коллекции bookings. Что это за тип? Каков тип его предметов? Если вы хотите придерживаться подхода обработки событий, все, что вам нужно изменить в своем коде, — это слово DataRowView в строке выше и заменить его типом ваших элементов.

dotNET 21.05.2019 20:07

Изменив его на эту строку, он все равно не работает :(

portalstudent 21.05.2019 20:09

Чем у меня есть эта ошибка: Cannot apply indexing with [] to an expression of type 'Booking' в этих строках: textBoxKlant.Text = row_selected["Naam"] .ToString(); > row_selected["Naam"]

portalstudent 21.05.2019 20:14

Бронирование — это список.

portalstudent 21.05.2019 20:15

Если вам нужна дополнительная справочная информация, не стесняйтесь спрашивать.

portalstudent 21.05.2019 20:16

Другие вопросы по теме