我有一个已经填满的DataGridView表。现在,当我单击DataGridView中的一个单元格时,我想要在该单元格之外创建一个ComboBox,然后我可以在其中选择"Items“。
Dgv_Data_List是我的DataGridView。
private void Dgv_Data_List_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
DataGridViewComboBoxCell CboCell = new DataGridViewComboBoxCell();
CboCell.Items.AddRange("Yes", "No");
Dgv_Data_List.Rows[e.RowIndex].Cells[e.ColumnIndex] = CboCell; <--At this point my program crashes
}
我不想要任何固定的组合框。一旦需要,就应该在运行时创建它们。
发布于 2021-11-18 08:17:28
目前还不清楚网格是如何填充数据的。如果手动添加列和行,则可能不会出现这种情况,但是,如果网格具有DataSource
,则当您在单元格中“双击”并在显示…时将该单元格设置为组合框时那么“current”单元格的值最好是“Yes”或“No”,否则你会得到网格DataError
,提示单元格中的值不是有效的组合框的值。
我认为您必须“删除”当前单元格值,以避免可能的错误。像…这样的东西
DataGridViewComboBoxCell CboCell = new DataGridViewComboBoxCell();
CboCell.Items.AddRange("Yes", "No");
Dgv_Data_List.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = "";
Dgv_Data_List.Rows[e.RowIndex].Cells[e.ColumnIndex] = CboCell;
将单元格值设置为空白string
将起作用。但是,如果基础数据源的单元格的列类型是数值类型…然后,您将得到网格DataError
,提示“Yes”或“No”值不是有效的数字值…因此,从技术上讲,只有当列类型是string
类型的列时,这才能起作用。因为大部分都是未知的,所以我只能假设所有的单元都是string
类型的。
发布于 2021-11-18 08:18:08
正如给出的代码一样,您创建了comboboxcell
,但没有转换网格视图。因此,请执行此操作。
this.dataGridView1[CboCell] = new DataGridViewComboBoxCell();
在创建comboboxcell
的地方尝试此操作。
https://stackoverflow.com/questions/70016151
复制相似问题