Хорошо, вот небольшой взлом, который вы можете сделать. Сначала подключитесь к событию EditingControlShowing DataGridView, и в обработчике события EventArgs есть свойство e.Control, которое можно привести к стандартному ComboBox. Итак, оставьте словарь, в котором ключевое слово int является индексом строки. Затем в обработчике событий добавьте поле со списком в словарь:
private Dictionary<int, ComboBox> comboBoxes;
public Form1()
{
InitializeComponent();
this.comboBoxes = new Dictionary<int, ComboBox>();
this.dataGridView1.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dataGridView1_EditingControlShowing);
}
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
var cb = e.Control as ComboBox;
if (!(this.comboBoxes.ContainsKey(this.dataGridView1.CurrentRow.Index)))
{
this.comboBoxes.Add(this.dataGridView1.CurrentRow.Index, cb);
}
}
Затем, когда вам нужно вывести объект из из комбинированного списка, просто выполните итерацию по своему словарю, получите правильный комбинированный список и просто получите SelectedItem / SelectedValue.