获取DataGridViewComboBoxCell VB.NET的SelectedItem

时间:2012-03-17 22:32:28

标签: vb.net datagridview combobox datagridviewcomboboxcell

非常愉快的下午 我现在遇到的问题是我无法将选择的值作为组合框选择,我正在尝试将文本和值设置为数据网格中每个单元格的组合框中的每个项目。 我的代码:

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'的成员

如果有人知道如何使用组合框为每个单元格的每个项目设置值和文本,我将非常感谢

1 个答案:

答案 0 :(得分:1)

您需要根据MSDN documentation

使用Value属性
  

与ComboBox控件不同,DataGridViewComboBoxCell不支持   具有SelectedIndex和SelectedValue属性。相反,选择一个   下拉列表中的值设置单元格Value属性。

要加载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的变量之外,上述所有代码都将保持不变。