2

こんにちは、私が今抱えている問題は、コンボボックスとして選択された値を取得できないことです.データグリッドの各セルのコンボボックスの各項目にテキストと値を設定しようとしています. 私のコード:

クラス 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' のメンバーではありません

コンボボックスを使用して各セルの各項目に値とテキストを設定する方法を誰かが知っていれば、とても感謝しています。

4

1 に答える 1

1

MSDNValueのドキュメントに従ってプロパティを使用する必要があります。

ComboBox コントロールとは異なり、DataGridViewComboBoxCell には SelectedIndex プロパティと SelectedValue プロパティがありません。代わりに、ドロップダウン リストから値を選択すると、セルの Value プロパティが設定されます。

DataGridViewComboBoxCell をロードするには、 DataSourceを設定する必要があります。

データソース内のデータのタイプによっては、DisplayMember を設定してコントロールの表示部分に表示するプロパティまたは列名を選択し、ValueMember を設定してプロパティまたは列名を選択する必要がある場合もあります。項目が選択されたときのコントロールの値プロパティ。

データソースに関する 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.

于 2012-03-17T23:21:25.817 に答える