1つの列がComboBoxであるDataTableにバインドされたDataGridViewを作成しようとしています。コードが実行されますが、バインド後(データがバインドされていないとき)に次のエラーが発生します。System.ArgumentException:DataGridViewComboBoxCellの値が無効です。 DataGridViewのでComboBoxを使用してDataGridViewをDataTableにバインドしない
列の一つは、それが元だとして(structureType命名)列挙型を使用していますDataGridViewComboBoxColumnです:
// ColumnStructure
//
this.ColumnStructure.ValueType = typeof(structureType);
this.ColumnStructure.DataSource = Enum.GetValues(typeof(structureType));
this.ColumnStructure.HeaderText = "Structure";
this.ColumnStructure.Name = "ColumnStructure";
this.ColumnStructure.DataPropertyName = "Structure";
//
私はDataTableのを使用せずにDataGridViewのを移入すると、それだけで正常に動作します:
structureType? structure = GetStructure(part);
dgvObjectTypes.Rows.Add(name, type, structure, count);
代わりにDataTableを使用したいが、それを動作させることはできない。 DataTableは次のように作成されます:
DataTable table = new DataTable();
table.Columns.Add("Name", typeof(string));
table.Columns.Add("Type", typeof(string));
table.Columns.Add("Structure", typeof(DataGridViewComboBoxCell));
table.Columns.Add("Count", typeof(int));
他の列はうまく動作しますが、「構造」列が機能しません。その後
var cb = new DataGridViewComboBoxCell();
cb.ValueType = typeof(structureType);
cb.DataSource = Enum.GetValues(typeof(structureType));
cb.Value = (structureType)structure;
私は、テーブルの行を作成したDataGridViewのデータソースとして、テーブルを設定します:私が読んだ
table.Rows.Add(name, type, cb, count);
dgv.DataSource = table;
ここでは、私はコンボボックスを作成しようとした方法ですコンボボックスで列挙型を使用すると問題が発生することが記載されている投稿が多数ありますが(例:DataGridView linked to DataTable with Combobox column based on enumなど)、ここではそうではありません。明示的に型指定された文字列の配列を使用しようとしましたが、同じエラーが発生します。私はDataGridViewComboBoxCellで何か間違っていると思います。
何が問題なのですか?
ありがとう!私はすでに希望を失っていた。 さらに質問: 'structureType?'がnullの場合、コンボボックスの表示を空にする簡単な方法がありますか?これはクールかもしれませんが、私は列挙型に "None"を追加しても行けます。 – JayByte
'None'を追加するのが最も簡単です。 – Plutonix