Возможно, ValueMember, назначенный вашему DataGridView, отличается от DisplayMember, назначенного вами. Если это так, вы получите пустое значение, плюс вы получите срабатывание DataGridError.
Вы должны попробовать:
foreach (DataGridViewRow row in dgMain.Rows){
DataGridViewComboBoxCell pkgBoxCell = row.Cells[ColumnSpeed.Index]
pkgBoxCell.Value = ((Package) pkgBoxCell.Items(0)).Id
}
Я преобразовал это из vb.net, поэтому он может не скомпилироваться. Вместо строки, в которой я устанавливаю значение, делайте все необходимые шаги, чтобы получить и установить правильное значение ValueMember. В моем примере я приведу элемент к определенному типу и использую его идентификатор.