C# 将 DatagridViewTextbox 转换为 DataGridViewComboBoxCell

C# Convert DatagridViewTextbox to DataGridViewComboBoxCell

我有一个已填充的 DataGridView table。 现在,当我单击 DataGridView 中的一个单元格时,我想从该单元格中创建一个组合框,然后我可以在其中选择“项目”。

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
    }

我不想要任何固定的组合框。它们应该在需要时在运行时创建。

不清楚网格是如何填充数据的。如果列和行是手动添加的,你可能会逃避这个问题,但是如果网格有 DataSource,那么当你“双击”到一个单元格并将单元格设置为组合框时,如你所示......那么“当前”单元格的值最好是“是”或“否”,否则您会得到网格 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 抱怨“是”或“否”值不是有效的数值......所以从技术上讲这仅当列类型为 string 类型列时才有效。由于其中大部分是未知的,我只能假设所有单元格都是 string 类型。

正如给定的代码,您创建了 comboboxcell 但没有转换网格视图。所以改为这样做。

this.dataGridView1[CboCell] = new DataGridViewComboBoxCell();

在创建 comboboxcell 的地方试试这个。