2017-06-28 50 views
0

我有一個Datagridview綁定數據庫中的數據。Datagridviewcombobox列的單元格顯示ValueMember而不是DisplayMember

DataGridViewTextBoxColumn colOperationID = new DataGridViewTextBoxColumn(); 
colOperationID.Name = "OperationID"; 
colOperationID.DataPropertyName = "OperationID"; 
BOMOperations.Columns.Add(colOperationID); 

DataGridViewComboBoxColumn colOperationDesc = new DataGridViewComboBoxColumn(); 
colOperationDesc.Name = "OperationDesc"; 
colOperationDesc.DataSource = srcDT; 
colOperationDesc.DisplayMember = "OperationDesc"; 
colOperationDesc.ValueMember = "OperationID"; 
colOperationDesc.DataPropertyName = "OperationDesc"; 
colOperationDesc.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox; 
colOperationDesc.DefaultCellStyle.BackColor = Color.White; 
colOperationDesc.DisplayStyleForCurrentCellOnly = true; 
BOMOperations.Columns.Add(colOperationDesc); 

然後用戶將點擊編輯按鈕,datagridview將變爲可編輯。我的問題是,當我點擊datagridviewcombobox列,然後我會選擇一個項目,該項目將正確顯示(DisplayMember),但只要細胞失去焦點,組合框的單元顯示ValueMember。

我已經嘗試了我在這裏檢查數據類型的解決方案,但是我的是正確的。 DisplayValue是一個字符串,而DisplayValue是一個int。

我也試過將colOperationDesc.DataPropertyName = "OperationDesc";改爲colOperationDesc.DataPropertyName = "OperationID";,它給了我這個例外。 exception

回答

1

colOperationDesc.DataPropertyNameDataGridView.DataSource是列的名稱,並應「是指」以相同的值colOperationDesc.ValueMember

注意colOperationDesc.ValueMembercolOperationDesc.DisplayMember應該從colOperationDesc.DataSource屬性/列名在你的情況從srcDT變量。

但只要在細胞失去焦點,組合框的單元格顯示 的ValueMember

這發生因爲列/屬性「OperationDesc」(DisplayMember)不從srcDT變量中找到。

+0

我已經嘗試更改colOperationDesc.DataPropertyName =「OperationID」,但它給了我一個System.Exception 不是Int32的有效值。 – Zhyke

+0

@Zhyke - 請檢查「colOperationDesc.ValueMember」和「colOperationDesc.DisplayMember」中使用的屬性/列是否存在於srcDT變量 – Fabio

+0

中,它們存在於數據表srcDT中。我更新了我的帖子,並上傳了我更改DataPropertyName時得到的異常。這裏是我的數據源代碼:'cmd = new SqlCommand(); srcDT = new DataTable(); cmd.CommandText =「SELECT OperationID,OperationDesc FROM Operation」; srcDT = _SQL.GetData(cmd); colOperationDesc.DataSource = srcDT; colOperationDesc.ValueMember =「OperationID」; colOperationDesc.DisplayMember =「OperationDesc」;' – Zhyke

0

您可以將DataPropertyName設置爲OperationID

colOperationDesc.DataPropertyName = "OperationID"; 
+0

謝謝,但我已經嘗試過這一個,它給我一個System.Exception:不是Int32的有效值。 – Zhyke

相關問題