2012-12-06 65 views
-1

我正在使用C#4.0 WinForms。我有一個DataGridView,它的所有列都在設計器中設置。 「房間」列是DataGridViewComboBoxColumn列。DataGridView與ComboBox列顯示System.Data.DataRowView而不是DisplayMember

所有單元顯示正確的信息,包括房間列。但是,當我單擊DropDown for Room時,列表中的項目會顯示一些說明System.Data.DataRowView而不是DisplayMember屬性的實際值的行數。

我的代碼如下所示:

DataTable dttRooms = GetDataTable(); //Returns rows with RoomID (GUID) and RoomType (string) columns 
List<RoomType> roomType = new List<RoomType> { }; 
foreach (DataRow dr in dttRooms.Rows) 
{ 
    roomType.Insert(roomType.Count, new RoomType { RoomID = Convert.ToString(dr["RoomID"]), RoomName = Convert.ToString(dr["RoomType"]) }); 
} 

DataGridViewComboBoxColumn dgvc; 
dgvc = (DataGridViewComboBoxColumn)dgvItems.Columns["Room"]; 
dgvc.HeaderText = "Room"; 
dgvc.DataPropertyName = "RoomID"; 
dgvc.DisplayMember = "RoomName"; 
dgvc.ValueMember = "RoomID"; 
dgvc.DataSource = roomType; 

dgvItems.DataSource = dtForGridView; //dtForGridView contains a RoomID column with the GUID of the corresponding room. 

我已經定義了RoomType類,如下:

public class RoomType 
{ 
    public string RoomID { get; set; } 
    public string RoomName { get; set; } 
} 

如果我更改數據庫中的項目的房間,它正確地顯示了GridView combobox列如預期。

我已經設置了列的DisplayMember和ValueMember。但是,當我拉下拉下來更改值時,有正確數量的行,但它們似乎忽略了其DisplayMember屬性。我一直在試圖弄清楚我做錯了什麼。我花了好幾個小時來看所有類似的問題,並嘗試了幾乎所有的東西。

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+0

謝謝約翰。欣賞建議。 –

回答

0

我改變了我的類的名稱和ROOMNAME屬性RoomType:

public class _RoomType 
{ 
    public string RoomID { get; set; } 
    public string RoomType { get; set; } 
} 

我改變了我的代碼,以便這些名稱都匹配:

DataTable dttRooms = lda.RoomDetailsGet(SeriesID, JobID); 
List<_RoomType> roomType = new List<_RoomType> { }; 
foreach (DataRow dr in dttRooms.Rows) 
{ 
    roomType.Insert(roomType.Count, new _RoomType { RoomID = Convert.ToString(dr["RoomID"]), RoomType = Convert.ToString(dr["RoomType"]) }); 
} 

DataGridViewComboBoxColumn dgvc; 
dgvc = (DataGridViewComboBoxColumn)dgvItems.Columns["Room"]; 
dgvc.HeaderText = "Room"; 
dgvc.DataPropertyName = "RoomID"; 
dgvc.ValueMember = "RoomID"; 
dgvc.DisplayMember = "RoomType"; 
dgvc.DataSource = roomType; 

dgvItems.DataSource = dtForGridView; 

突然它的工作如預期。我仍然很想知道爲什麼,但至少我的問題解決了。

相關問題