#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"];