4

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

4 回答 4

1

我有同样的问题。对我来说,“statusID”很长。我通过 system.type.gettype("System.Int64") 做到了,它给出了相同的行为。将其更改为 Int32 时,行为正常。

所以这是 valuemember 类型和 datagridview 类型之间的不匹配。

于 2012-06-29T18:19:55.720 回答
0

您是否设置了组合框列的 datapropertyName 并将该列添加到 datagridview?你必须写

    statusCBoxColumn.DataPropertyName = "StatusId";

并添加列

    datagridview1.Columns.Add(statusCBoxColumn);
于 2012-05-30T09:05:54.483 回答
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)
于 2013-01-09T09:13:07.500 回答
0

e.Value = GetData("Select to_char(StatusId) , StatusText from Status where ID = " & e.Value).ToString()

于 2014-10-21T19:12:45.360 回答