2012-12-06 136 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; 

突然它的工作如预期。我仍然很想知道为什么,但至少我的问题解决了。

相关问题