我正在使用 C# 4.0 WinForms。我有一个 DataGridView,它的所有列都在设计器中设置。“房间”列是 DataGridViewComboBoxColumn 列。
所有单元格都显示正确的信息,包括房间列。但是,当我单击 Room 的 DropDown 时,列表中的项目会显示一定数量的行,这些行显示 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 组合框列上。
我已经设置了列的 DisplayMember 和 ValueMember。但是当我下拉下拉菜单来更改值时,行数是正确的,但它们似乎忽略了它们的 DisplayMember 属性。我已经尝试了很长一段时间来弄清楚我做错了什么。我花了好几个小时在 SO 上查看所有类似的问题,并尝试了几乎所有的东西。