Как показать выбранное значение ComboBox, если ComboBox привязан к набору данных

#c# #wpf #combobox

#c# #wpf #комбинированный блок #combobox

Вопрос:

У меня есть a, ComboBox который привязан к DataSet . Я хотел показывать выбранное значение всякий раз, когда ComboBox происходит изменение выбора. У меня есть следующий код:

 private void devCb1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    dv = new DataView(
        dt,
        "Device_ID = "   devCb1.SelectedIndex,
        "Data_ID ASC",
        DataViewRowState.CurrentRows);

    dataDg1.ItemsSource = dv;
    devCb1.DisplayMemberPath = "Content";
    MessageBox.Show(devCb1.SelectedValue.ToString());
}
  

Но это только дает мне

System.Data.DataRowView

Я уже установил DisplayMemberPath , но он все еще не показывает мне содержимое выбранного элемента. Что случилось?

[ОТРЕДАКТИРОВАНО] Я также пробую следующее

 devCb1.SelectedValuePath = "Content";
MessageBox.Show(devCb1.SelectedValue.ToString());
  

Но это также все еще дает мне

System.Data.DataRowView

Тоже не работает..

Комментарии:

1. Кто, черт возьми, отменяет голосование за меня, по крайней мере, оставьте комментарий, почему вы это делаете. Я поискал по SO и Google, но ответа на этот вопрос нет.

2. Я знаю, что прошло немного времени после того, как был задан вопрос, но я думаю, что теперь можно достичь того, чего вы хотели простым способом.

Ответ №1:

DataRowView не имеет содержимого, насколько я могу видеть. Я думаю, что ваш SelectedValuePath должен указывать на Row (или, если текущий путь правильно указывает на Content из ComboBoxItem , которые вам просто нужно привести в этот момент), и вам все равно нужно привести SelectedValue , являющееся строкой, к этому классу, и оттуда вы можете получить часть его содержимого.

Установите точки останова, используйте отладчик, посмотрите на данные в ваших объектах.

Комментарии:

1. спасибо, но как я могу указать на строку? Я попробовал devCb1. SelectedValuePath = «Строка» или MessageBox. Показать((devCb1. Выбранное значение как RowView). toString()); но любой из них просто выдает мне исключение..

2. Обновил мой вопрос, поскольку ваше содержимое может быть содержимым элемента ComboBox, вам может потребоваться сохранить путь и преобразовать выбранное значение в DataRowView, а не просто вызывать toString для всего, вам практически никогда не следует использовать этот метод, посмотрите на данные в отладчике и получите нужные вам поля / свойства.

Ответ №2:

Попробуйте SelectedValuePath для доступа к данным, которые вы хотите просмотреть

Ответ №3:

Ну, по крайней мере, сейчас (через 2 года после того, как был задан вопрос) можно получить доступ к данным в DataRowView, просто приведя выбранное значение к System.Data.DataRowView и обратившись к строке свойства[«colName»] следующим образом:

 ((System.Data.DataRowView)ComboBoxName.SelectedValue).Row["colName"];