我有一个小问题。 DataGridViewComboBoxColumn
显示ValueMember
而不是DisplayMember
的值。网格工作正常,当我从此列中选择某些内容时,我会看到DisplayMember
值,但是当焦点丢失时,网格会显示ValueMember
。我有这个代码组合框列:
statusCBoxColumn.DataSource = dt 'datatable with two fields StatusId and StatusText
statusCBoxColumn.DisplayMember = "StatusText" 'is type NVarchar
statusCBoxColumn.ValueMember = "StatusId" 'is type Int
有人能帮助我吗?
编辑:我通过以下方式解决了这个问题:
Private Sub dgv_CellFormatting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles dgv.CellFormatting
If (dgv.Columns(e.ColumnIndex).Name = "statusCBoxColumn") Then
If e.Value & "" > "" Then
Dim s1 As String = e.Value
e.Value = GetData("Select StatusText from Status where ID = " & e.Value).ToString()
End If
End If
End Sub
但我不认为这是最好的解决方案......
答案 0 :(得分:1)
我遇到了同样的问题。 我的“statusID”很长。 我是通过system.type.gettype(“System.Int64”)制作的 这给了同样的行为。 将其更改为Int32时,行为正常。
因此,valuemember类型和datagridview类型之间的不匹配。
答案 1 :(得分:0)
您是否设置了comboboxcolumn的datapropertyName并将该列添加到datagridview?你要写
statusCBoxColumn.DataPropertyName = "StatusId";
并添加类似
的列 datagridview1.Columns.Add(statusCBoxColumn);
答案 2 :(得分:0)
尝试这个我在显示值成员时也遇到问题,希望它能正常工作。
For index = 0 To cbo.Items.Count - 1
cbo.SelectedIndex = index
MessageBox.Show(CType(cbo.SelectedValue, String))
Next
我用过的是:
Dim jm As Integer
jm = CType(cmbCategory.SelectedValue, String)
MsgBox(jm)
答案 3 :(得分:0)
e.Value = GetData("选择to_char(StatusId),状态中的StatusText,其中ID ="& e.Value).ToString()