В коде, где вы берете информацию о ячейке DataGridView
, свойство Value дает вам ValueMember для ячейки comboBox, а не DisplayMember в comboBox. Вместо этого вам нужно получить доступ к FormattedValue (который вы можете использовать для всех своих ячеек).
Вот код, показывающий, как это сделать (наряду с некоторыми другими небольшими улучшениями):
for (int i = 0; i < dataGridView1.RowCount; i++)
{
if (!dataGridView1.Rows[i].IsNewRow)
{
for (int j = 0; j < dataGridView1.ColumnCount; j++)
{
DataGridViewCell cell = dataGridView1[j, i];
MessageBox.Show(cell.FormattedValue.ToString());
}
}
}
Там я просто беру FormattedValue и отображаю его в MessageBox, но вы можете просто назначить его своей ячейке.
Я также использовал немного более компактный синтаксис для циклов и добавил в проверку NewRow сетки (которая может содержать нулевые значения, которые могут сломать вещи).
Кроме того, одна полезная вещь, которую нужно знать, это то, что, получив ячейку, вы можете получить фактический тип ячейки, например:
if (cell is DataGridViewComboBoxCell)
И это дает вам больше возможностей для работы при решении проблем. В качестве окончательного варианта вы даже можете получить доступ к EditingControl (фактическому DropDown в ComboBoxColumn), и опять же, это дает намного больше возможностей.
Вам не нужно это в вашем случае, но о них полезно знать.