Vb.net 为什么DataGridViewComboBoxColumn显示ValueMember?
我有个小问题Vb.net 为什么DataGridViewComboBoxColumn显示ValueMember?,vb.net,datagridview,datagridviewcombobox,Vb.net,Datagridview,Datagridviewcombobox,我有个小问题DataGridViewComboxColumn显示来自ValueMember的值,而不是来自DisplayMember。网格工作正常,当我从该列中选择某个内容时,我会看到DisplayMember值,但当焦点丢失时,网格会显示ValueMember。我有以下代码组合框列: statusCBoxColumn.DataSource = dt 'datatable with two fields StatusId and StatusText statusCBoxColumn.Displ
DataGridViewComboxColumn
显示来自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
但是我不认为这是最好的解决方案…您设置了comboboxcolumn的datapropertyName并将该列添加到datagridview了吗?你必须写作
statusCBoxColumn.DataPropertyName = "StatusId";
并添加如下列:
datagridview1.Columns.Add(statusCBoxColumn);
我也有同样的问题。
我的“状态ID”很长。
我是通过system.type.gettype(“system.Int64”)创建的
这就产生了同样的行为。
将其更改为Int32时,行为正常
所以valuemember类型和datagridview类型不匹配。试试这个,我在显示valuemember时也遇到了问题,希望它能正常工作
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)
e、 Value=GetData(“选择to_char(StatusId),StatusText from Status where ID=“&e.Value”)。ToString()Yes,设置DataPropertyName并将列添加到datagridview。datagridview工作正常,我可以更改此列的值,但当我从该网格更改焦点时,ComboBoxColumn中的show ValueMember不是DisplayMember。您好@skorec1,欢迎使用SO!你能再解释一下吗?它能解决问题吗?有什么问题?只是更多的细节而已。另外,请将其包含在代码块(“{}”按钮)中,以便更易于阅读。