Gastum, no se si pudiste resolver tu problema...
Pero tengo la respuesta a tu pregunta y el porque siempre te devolvia el error:
"Referencia a objeto no establecida como instancia de un objeto."
este error es porque en alguna de las celdas de tu datagridview hay valores NULL, es decir, valores en blanco... por ejemplo
row.Cells("Cantidad").Value.ToString
en esa celda podria haber un valor NULL si ese fuera el caso, te devolvera siempre el error... para evitarlo tendrias que colocar la respectiva condicion...
si aun te sirve la respuesta, avisame y te pondre el codigo de la forma correcta de como hacer lo que quieres hacer...