-1

私はC#4.0WinFormsを使用しています。デザイナですべての列が設定されているDataGridViewがあります。「部屋」列はDataGridViewComboBoxColumn列です。

部屋の列を含め、すべてのセルに正しい情報が表示されます。ただし、RoomのDropDownをクリックすると、リスト内のアイテムに、DisplayMemberプロパティの実際の値ではなく、System.Data.DataRowViewという行の数が表示されます。

私のコードは次のようになります。

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に何時間も費やして、すべての同様の質問を調べ、ほとんどすべてを試しました。

4

1 に答える 1

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;

突然、期待どおりに機能しています。理由は知りたいのですが、少なくとも私の問題は解決しました。

于 2012-12-06T23:33:54.107 に答える