Just to start with: you should not allow yourself immediate constants like 4 (especially 4), 5, 10, etc. Those are a permanent source of bugs. (Imagine you change 4 to 5 in one place, forgot to change in another; not this is not an assumption, something happening all the time.) Parametrize everything. Later on, get rid of all hard-coded strings; they belong in resources or data/configuration files.
Now, I just found your bug. See:
object[] grd_values = new object[4];
grd_values[4] = Refurb_Rate;
No, you did not comment the line where exception is thrown correctly. It is thrown one line before, see above.
Way too easy. I told you, immediate constants is evil. You could use
System.Collection.Generic.List
or something, use it's
Count
property… whatever.
—SA