Получите SelectedItem объекта DataGridViewComboBoxCell VB.NET - PullRequest
1 голос
/ 18 марта 2012

Очень добрый день всем, у меня сейчас проблема в том, что я не могу получить значение, выбранное в качестве комбинированного списка, я пытаюсь установить текст и значение для каждого элемента в комбинированном списке каждой ячейки в сетке данных.Мой код:

CLASS MyListItem:

Public Class MyListItem
    Private mText As String
    Private mValue As String

    Public Sub New(ByVal pText As String, ByVal pValue As String)
        mText = pText
        mValue = pValue
    End Sub

    Public ReadOnly Property Text() As String
        Get
            Return mText
        End Get
    End Property

    Public ReadOnly Property Value() As String
        Get
            Return mValue
        End Get
    End Property

    Public Overrides Function ToString() As String
        Return mText
    End Function
End Class

Загрузка формы:

DataGridView1.Rows.Add()
Dim dgvcbc As DataGridViewComboBoxCell = DirectCast(DataGridView1.Rows(0).Cells(0), DataGridViewComboBoxCell)
dgvcbc.Items.Add(New MyListItem("Text to be displayed", "value of the item"))

Попробуйте отобразить выбранное значение:

Dim oItem As MyListItem = CType(**dgvcbc.SelectedItem**, MyListItem)
MessageBox.Show("The Value of the Item selected is: " & oItem.Value)

ОШИБКА: 'SelectedItem' не является членом 'System.Windows.Forms.DataGridViewComboBoxCell'

Если у кого-то есть идеи, как установить значения и текст для каждого элемента каждой ячейки с помощьюcombobox, я был бы очень благодарен, спасибо

1 Ответ

1 голос
/ 18 марта 2012

Вам необходимо использовать свойство Value в соответствии с документацией MSDN :

В отличие от элемента управления ComboBox, DataGridViewComboBoxCell не имеют свойства SelectedIndex и SelectedValue. Вместо этого, выбирая значение из раскрывающегося списка устанавливает свойство ячейки Значение.

Чтобы загрузить DataGridViewComboBoxCell, вам нужно установить DataSource .

В зависимости от типа данных в источнике данных вам также может понадобиться настроить DisplayMember, чтобы выбрать имя свойства или столбца для отображения в отображаемой части элемента управления, и ValueMember, чтобы выбрать имя свойства или столбца, которое используется установить свойство Value элемента управления при выборе элемента.

Вот несколько дополнительных указаний MSDN по источнику данных:

Обычно это свойство устанавливается для всего столбца ячеек. через свойство DataGridViewComboBoxColumn.DataSource.

Если возможно, установите DataSource на источник, содержащий только возможные выборки, как столбец выборок. Тогда DisplayMember свойство не должно быть установлено. Но если источник больше сложный, установите DisplayMember на имя свойства или столбца из которого можно извлечь возможные варианты.

Если для DataSource задан строковый массив, тогда ValueMember и DisplayMember не должен быть установлен, потому что каждая строка в массиве будет использоваться как для значения, так и для отображения.

Так что в вашем случае вам нужно будет сделать что-то похожее на следующее:

Dim cListItems As New System.Collections.Generic.List(Of MyListItem)

cListItems.Add(New MyListItem("Text to be displayed", "value of the item"))

Dim dgvcbc As DataGridViewComboBoxCell = DirectCast(DataGridView1.Rows(0).Cells(0), DataGridViewComboBoxCell)
dgvcbc.DataSource = cListItems
dgvcbc.DisplayMember = "Text"
dgvcbc.ValueMember = "Value"

Наконец, если значения одинаковы для всех ячеек, вы, вероятно, захотите назначить источник данных для столбца при его создании. Весь приведенный выше код останется прежним, за исключением того, что вы замените ссылку dgvcbc на переменную, которая содержит datagridviewcomboboxcolumn.

...