if (POSDGV.Rows[j].Cells[2].Value == null)
It really depends on how you're storing null values. Likely the check will fail because the cell value is actually DBNull.Value or simply an empty string:
if (POSDGV.Rows[j].Cells[2].Value == DBNull.Value || string.IsNullOrEmpty(POSDGV.Rows[j].Cells[2].Value.ToString()))