Weird. Я сделал это недавно, и это сработало как шарм. В моем приложении, когда gridview находится в режиме редактирования (Readonly false), и когда вы выбираете ячейку, она становится выпадающим списком, а когда вы покидаете ячейку, она будет вести себя как текстовое поле. Вот что я сделал
void dgUpdateItems_CellEnter(object sender, DataGridViewCellEventArgs e)
{
DataGridView dg = (DataGridView)sender;
if (e.ColumnIndex == dg.Columns["ItemCategory"].Index)
{
if (e.ColumnIndex == e.RowIndex)
{
dg[e.ColumnIndex, e.RowIndex].ReadOnly = true;
return;
}
DataGridViewComboBoxCell cmbCell = new DataGridViewComboBoxCell();
ComboUpdate(cmbCell);
cmbCell.Value = ((DataGridView)sender)[e.ColumnIndex, e.RowIndex].Value.ToString();
((DataGridView)sender)[e.ColumnIndex, e.RowIndex] = cmbCell;
}
}
void dgUpdateItems_CellLeave(object sender, DataGridViewCellEventArgs e)
{
DataGridView dg = (DataGridView)sender;
if (e.ColumnIndex == dg.Columns["ItemCategory"].Index)
{
if (e.ColumnIndex == e.RowIndex)
return;
string str = dg[e.ColumnIndex, e.RowIndex].Value.ToString();
DataGridViewComboBoxCell cmb = (DataGridViewComboBoxCell)dg[e.ColumnIndex, e.RowIndex];
string val = cmb.Value.ToString();
dg[e.ColumnIndex, e.RowIndex] = new DataGridViewTextBoxCell();
dg[e.ColumnIndex, e.RowIndex].Value = val;
Это какая-то часть моего кода, если не понимаю, дайте мне знать.
Вот ссылка проверить это. Это может помочь.
ComboBox в DatagridView в режиме редактирования
И извините, забыл сказать вам самое важное, оно работало, даже когда оно сфокусировано.
И если вы ищете что-то еще, пожалуйста, бросьте камень в мою голову.
Надеюсь, это поможет.