C # WPF - влияет ли пакет материалов на функции для сетки данных? - PullRequest
0 голосов
/ 21 мая 2019

Я хочу отобразить выбранную строку из таблицы данных в текстовые поля, поэтому я получил это видео: 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();
            }
        }

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

1 Ответ

2 голосов
/ 21 мая 2019

Ваш 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;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...