добавление DataGridViewComboBoxCell в DataGridViewRow

Надо причесать код. Создал код

dataGridView1.AutoGenerateColumns = false;

dataGridView1.Columns.Clear();

var c_name = new DataGridViewTextBoxColumn()
{
    HeaderText = lp.grid_name,
    Width = 50,
    Name = "name"
};
dataGridView1.Columns.Add(c_name);

var c_name_long = new DataGridViewTextBoxColumn()
{
    HeaderText = lp.grid_name_long,
    Width = 150,
    Name = "name_long"
};
dataGridView1.Columns.Add(c_name_long);

var c_value = new DataGridViewComboBoxColumn()
{
    HeaderText = lp.grid_value,
    Width = 100,
    Name = "name_lang"
};
dataGridView1.Columns.Add(c_value);

foreach (DataStruct block in ds)
{
    var row = new DataGridViewRow();
    var name_langCell = new DataGridViewComboBoxCell();
    name_langCell.Items.AddRange(block.name_lang.Values.ToArray());
    row.Cells.Add(new DataGridViewTextBoxCell { Value = block.name });
    row.Cells.Add(new DataGridViewTextBoxCell { Value = block.name_long });
    row.Cells.Add(name_langCell);
    dataGridView1.Rows.Add(row);

}

Код работает, но читаемость никакая. По сути на данном этапе я создаю три столбца, последний столбец содержит DataGridViewComboBox. Строки надо добавлять в ручную. Я не понимаю как этот код структурировать. Например, хотелось бы изобразить вроде:

this.dataGridView1.Rows.Add(block.name, block.name_long, name_langCell);

что бы не перечислять типы ячеек, но на name_langCell всё останавливается? Вторая проблема более важна - ужасная читаемость кода. Поскольку это черновик, то, например, при добавлении столбца, придётся следить за разметкой сразу в двух частях. Хочется изобразить в цикле какую ту привязку к имени по типу

row.Cells["name"] = block.name;

Тем много, но DataGridViewComboBox какой-то нежный шибко.


Ответы (1 шт):

Автор решения: pepelxl

Немного покопавшись, нашел, что dataGridView1.Rows.Add() возвращает номер строки, поэтому:

var row = dataGridView1.Rows[dataGridView1.Rows.Add()];

работает. Можно сразу добавить некоторые аргументы в Add(), но для исключения ошибки, я предпочту обращаться к ячейкам по именам.

row.Cells["name"].Value = block.name;
row.Cells["name_long"].Value = block.name_long;
var name_langCell = new DataGridViewComboBoxCell();
name_langCell.Items.AddRange(block.name_lang.Values.ToArray());
row.Cells["name_lang"] = name_langCell;
→ Ссылка