Программисты - существа капризные и непредсказуемые. Иногда у них возникает желание заполнить ComboBox данными из DataTable вручную, не используя визуальную среду. Делается это следующим образом:
someComboBox.DataSource = someDataTable; someComboBox.DisplayMember = "FIELD_TO_DISPLAY"; someComboBox.ValueMember = "FIELD_TO_HIDE";
Не заполнив DisplayMember и ValueMember можно получить совершенно невнятную ошибку - ComboBox будет заполнен строками "System.Data.DataRowView" (подробнее на StackOverFlow).
Так же ее можно получить, попытавшись прочитать выбранное значение до установки свойства DisplayMember - на самом деле это не так уж и сложно, установка значения DataSource вызывает событие SelectedIndexChanged - на которое нередко вешается обработка.
Еще один возможный случай возникновения этой ошибки - привязка пустой таблицы без колонок, такое может случиться если структура таблицы автоматически создается методом DataAdapter.Fill(). В таком случае надо заранее создать таблицу с нужным набором колонок или использовать строго типизированный DataSet.
Если же мы хотим получить именно текст выбранного в ComboBox пункта, то надо использовать не кажущееся самоочевидным свойство SelectedText, а просто Text.
Глядя на свойства SelectedItem, SelectedIndex и SelectedValue начинающий программист может подумать, что SelectedText так же содержит текст выбранного пункта, но на самом деле оно содержит выделенную мышкой часть текста выбранного пункта - и в большинстве случаев пустое, а если свойство DropDownStyle имеет значение DropDownList - то SelectedText будет пустым всегда.
Спасибо за пост! Оказался очень полезен!
Очень полезная информация!!!!!
Как раз столкнулась с этой проблемой, спасибо что помогли)