И еще один способ:
У меня работает следующее:
DataGridViewComboBoxColumn newColumn = new DataGridViewComboBoxColumn();
newColumn.Name = "abc";
newColumn.DataSource = new string[] { "a", "b", "c" };
dataGridView1.Columns.Add(newColumn);
foreach (DataGridViewRow row in dataGridView1.Rows)
{
DataGridViewComboBoxCell cell = (DataGridViewComboBoxCell)(row.Cells["abc"]);
cell.DataSource = new string[] { "a", "c" };
}
Вы также можете попробовать (у меня это тоже работает):
for (int row = 0; row < dataGridView1.Rows.Count; row++)
{
DataGridViewComboBoxCell cell =
(DataGridViewComboBoxCell)(dataGridView1.Rows[row].Cells["abc"]);
cell.DataSource = new string[] { "f", "g" };
}
Другой вариант - попробовать привязку данных на уровне строк. Попробуйте использовать событие OnRowDataBound. Затем вы можете программно установить, что находится в поле со списком, на основе содержимого этой строки.
Конечно, это предполагает, что вы привязываете данные к вашей сетке.