добавление 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 шт):
Немного покопавшись, нашел, что 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;