Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataGridView,组合框列显示System.Data.DataRowView,而不是DisplayMember_C#_C# 4.0_Datagridview_Datagridviewcombobox - Fatal编程技术网

C# DataGridView,组合框列显示System.Data.DataRowView,而不是DisplayMember

C# DataGridView,组合框列显示System.Data.DataRowView,而不是DisplayMember,c#,c#-4.0,datagridview,datagridviewcombobox,C#,C# 4.0,Datagridview,Datagridviewcombobox,我正在使用C#4.0 WinForms。我有一个DataGridView,它的所有列都在设计器中设置。“房间”列是DataGridViewComboBoxColumn列 所有单元格都显示正确的信息,包括房间列。但是,当我单击文件室的下拉列表时,列表中的项目会显示大量的行,这些行显示System.Data.DataRowView,而不是DisplayMember属性的实际值 我的代码如下所示: DataTable dttRooms = GetDataTable(); //Returns rows

我正在使用C#4.0 WinForms。我有一个DataGridView,它的所有列都在设计器中设置。“房间”列是DataGridViewComboBoxColumn列

所有单元格都显示正确的信息,包括房间列。但是,当我单击文件室的下拉列表时,列表中的项目会显示大量的行,这些行显示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.
如果我更改了数据库中某个项目的房间,它将按预期正确显示在GridView组合框列上


我已经设置了该列的DisplayMember和ValueMember。但当我下拉更改值时,行数是正确的,但它们似乎忽略了DisplayMember属性。我已经花了很长时间试图弄清楚我做错了什么。我花了好几个小时来研究所有类似的问题,并尝试了几乎所有的方法。

我将我的类名和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;
DataTable dttRooms=lda.RoomDetailsGet(SeriesID,JobID);
List roomType=新列表{};
foreach(dtrooms.Rows中的数据行dr)
{
插入(roomType.Count,new _roomType{RoomID=Convert.ToString(dr[“RoomID”]),roomType=Convert.ToString(dr[“roomType”]);
}
DataGridViewComboBox列dgvc;
dgvc=(DataGridViewComboBoxColumn)dgvItems.Columns[“房间”];
dgvc.HeaderText=“房间”;
dgvc.DataPropertyName=“RoomID”;
dgvc.ValueMember=“RoomID”;
dgvc.DisplayMember=“RoomType”;
dgvc.DataSource=roomType;
dgvItems.DataSource=dtForGridView;

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

我已经编辑了你的标题。请看“”,其中的共识是“不,他们不应该”。谢谢约翰。谢谢你的建议。
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;