Show / Hide Table of Contents

MSDN.WhiteKnight - Stack Overflow answers

Ответ на "Как программно в dataGridView сделать поле ComboBox?"

Answer 893210

Link

Как-то так:

string[] countrys = new string[] { "США", "ОАЭ", "ЮАР" };            
var oldcol = dataGridView1.Columns[1];
var newcol = new DataGridViewComboBoxColumn();
newcol.HeaderText = oldcol.HeaderText;
newcol.Name = oldcol.Name;
newcol.DataSource = countrys;
newcol.DataPropertyName = oldcol.DataPropertyName;  
dataGridView1.Columns.RemoveAt(1);
dataGridView1.Columns.Insert(1,newcol);

Недостаток: если значение в таблице отсутствует в списке для ComboBox, при каждом нажатии на DataGridView валится ошибка (необходимо обработать событие DataError).


Чтобы ComboBox раскрывался по первому клику, добавьте такой обработчик для события CellClick в DataGridView:

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    DataGridViewCell cell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
    if (cell is DataGridViewComboBoxCell)
    {                
        dataGridView1.BeginEdit(false);
        (dataGridView1.EditingControl as DataGridViewComboBoxEditingControl).DroppedDown = true;                
    }
}

Content is retrieved from StackExchange API.

Auto-generated by ruso-archive tools.

Back to top Stack Overflow answers (published from sources in GitHub repository). Copyright (c) 2020, MSDN.WhiteKnight. Content licensed under BSD 3-Clause License.
Generated by DocFX