You probably didn't mean to use
grdSale.Rows[i]
inside your loop - which would make sense given that the loop is bounded by the length of a totally different object.
Probably, you meant to say:
string itemm1 = DataBinder.Eval(dt_GHide.Rows[i].DataItem, "item1").ToString();
instead of:
string itemm1 = DataBinder.Eval(grdSale.Rows[i].DataItem, "item1").ToString();