Я создал приложение WindowForm с полем со списком, в котором есть режим привязки данных к представлению в базе данных SQL и текстовому полю.
Запрос представления: «ВЫБЕРИТЕ [CompanyName],CountryName FROM [CompanyRefTable]»
Члены выпадающего списка следующие: Источник данных: CDALLENTITIESLISTBindingSource DisplayMember: ИмяКомпании ValueMember: ИмяКомпании SelectedValue: ИмяКомпании
Я внес некоторые изменения в код (обновлено на странице)
Теперь я получаю значения из второго столбца :)
Мой код:
Dim rowView As DataRowView = TryCast(Me.cmbEntity.SelectedItem, DataRowView)
If (Not rowView Is Nothing) Then
Dim row As DataRow = rowView.Row
Dim subjectName As String = DirectCast(row.Item("CountryName"), String)
Me.txtCountry.Text = subjectName.ToString
End If
Спасибо за помощь!
Нет такого понятия, как ComboBox
, связанный с базой данных SQL. Предположительно реальный сценарий заключается в том, что вы заполняете DataTable
из SQL Server, а затем привязываете его к ComboBox
через BindingSource
. DataTable
— это DataTable
. Откуда взялись данные, не имеет отношения к его управлению.
SelectedValue
— это значение из столбца, указанного ValueMember
. Имеет ли смысл значение CountryName
, индексировать его, а затем вызывать ToString
по результату? Это риторический. Это не имеет смысла. Я предполагаю, что на самом деле вы пытаетесь получить всю строку, а затем получить значение из столбца с индексом 0. В этом случае вам нужен SelectedItem
, а не SelectedValue
, хотя с использованием свойства Current
BindingSource
был бы более подходящим. Затем вы приводите тип DataRowView
, а затем индексируете его по имени столбца или порядковому номеру.
Вы должны сначала проверить, является ли SelectedIndex
-1
, это происходит (всегда). Тогда Me.cmbEntity.SelectedValue(1).ToString
? SelectedValue — это текущее значение, соответствующее ValueMember
текущего SelectedItem
. См. ListControl.GetItemText().
Спасибо jmcilhinney за вашу помощь.
Спасибо :jmcilhinney за ваш комментарий, он помог мне найти решение :)
Я нашел решение моей проблемы в Интернете:
Dim rowView As DataRowView = TryCast(Me.cmbEntity.SelectedItem, DataRowView)
If (Not rowView Is Nothing) Then
Dim row As DataRow = rowView.Row
Dim subjectName As String = DirectCast(row.Item("CountryName"), String)
Me.txtCountry.Text = subjectName.ToString
End If
Возможный дубликат Что такое NullReferenceException и как его исправить?, я уверен, что эта ветка объяснит и ответит более подробно о вашей ошибке, которую вы получаете.