Here:
if (Convert.ToInt32(this.dgv_Add_job_card.CurrentRow.Cells[4].Value) == 0)
..that cell holds a DBNull-value (the single instance of DBNull to be exact) which probably originates from reading from your database. It can't be converted or cast to anything (other than Object). You have to check for it before attempting to check for being equal to 0. Probably like this:
if (this.dgv_Add_job_card.CurrentRow.Cells[4].Value == DBNull.Value || (int)this.dgv_Add_job_card.CurrentRow.Cells[4].Value == 0)
("Probably" because I don't know your intention here.)
Replace the cast
(int)
by the actual type of that column if it's not
int
. You know the column types, no need to use Convert.ToXXX if you can just cast it.
If you don't want it to "be able to be DBNull" but just 0 instead you have to change your database-table-column to be non-nullable and when inserting into that table, insert 0 instead of null.