2012-05-30 64 views
3

我有一个小问题。 DataGridViewComboBoxColumn显示值从ValueMember而不是从DisplayMember。网格工作正常,当我从这个列中选择一些东西时,我看到DisplayMember值,但是当焦点丢失时,网格显示ValueMember。我有这个代码组合框列:为什么DataGridViewComboBoxColumn显示一个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 

但我不认为这是最好的解决办法...

回答

1

你有没有设置comboboxcolumn的datapropertyName和将该列添加到datagridview?你已经写

statusCBoxColumn.DataPropertyName = "StatusId"; 

,并添加列类似

datagridview1.Columns.Add(statusCBoxColumn); 
+0

是的,DataPropertyName被设置并且列被添加到datagridview。 datagridview工作正常,我可以更改此列的值,但是当我从此网格更改焦点时,它显示ValueCommber而非ComboBoxColumn中的DisplayMember。 – wertyk

1

我有同样的问题。 我的“statusID”很长。 我做了system.type.gettype(“System.Int64”) 这给了相同的行为。 将其更改为Int32时,行为正常。

因此,valuemember类型和datagridview类型之间的à不匹配。

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) 
0

e.Value =的GetData( “选择TO_CHAR(StatusId),状态文本从状态,其中ID =” & e.Value)的ToString()

+1

Hi @ skorec1,欢迎来到SO!你能再解释一下吗?它解决了问题吗?问题是什么?更多细节都是。另外,请将其放在代码块(“{}”按钮)中,以便阅读。 –