2012-05-30 29 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!你能再解釋一下嗎?它解決了問題嗎?問題是什麼?更多細節都是。另外,請將其放在代碼塊(「{}」按鈕)中,以便閱讀。 –

相關問題