我有一个DataGridView,并且已经可以向它添加DataGridViewComboBoxColumn。它使用自定义ValueDescriptor类从数据库StoredProcedure读取数据,这是它的代码:
Shared Sub fillComboBoxCellUsingSP(ByVal comboBox As DataGridViewComboBoxColumn, ByVal proc_name As String, ByVal param As Object(), ByVal firstitem As String)
Dim dt As New DataTable
Utils.executeSP(proc_name, param, dt)
If comboBox.DataSource IsNot Nothing Then
comboBox.DataSource = Nothing
End If
comboBox.Items.Clear()
Dim VDP_Array As New ArrayList
VDP_Array.Add(New ValueDescriptionPair(Nothing, firstitem))
For Each row As DataRow In dt.Rows
VDP_Array.Add(New ValueDescriptionPair(row(0), row(1)))
Next
With comboBox
.DisplayMember = "Description"
.ValueMember = "Value"
.DataSource = VDP_Array
End With
dt.Dispose()
End Sub
它可以显示数据,但我无法使用此方法以编程方式选择它:
Shared Sub selectInComboDataGrid(ByVal comboBox As DataGridViewComboBoxCell, ByVal value As String)
For Each o As ValueDescriptionPair In comboBox.Items
If o.Value IsNot Nothing AndAlso o.Value.ToString.Equals(value) Then
comboBox.Value = o
Exit For
End If
Next
End Sub
实际上,阅读comboBox.Value = o
的行是可以的。但是,组合框单元格仍未显示该值。只是空的。有时,会引发DataError事件。
这有什么线索吗? 非常感谢你。
已经尝试解决这个问题差不多两个小时了......:)
答案 0 :(得分:1)
尝试将值设置为DataGridView而不是ComboBox。这是一个例子:
comboBox.DataGridView(comboBox.ColumnIndex, comboBox.RowIndex).Value = o