为什么DataGridViewComboBoxColumn显示ValueMember?

时间:2012-05-30 08:50:56

标签: vb.net datagridview datagridviewcombobox

我有一个小问题。 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

但我不认为这是最好的解决方案......

4 个答案:

答案 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()