It's not that obvious what exactly you want, but there are a couple of things which may help you.
First off, a foreach loop executes on each and every value in the collection (in this case, each row in the data grid view) unless you explicitly use
break
to exit the loop earlier. So if you don't want every item, then you need to look at either not using a loop at all, or using some kind of conditional test inside the loop to decide when it is necessary to exit early.
For example:
foreach (DataGridViewRow r in dgv_item.Rows)
{
decimal d = Convert.ToDecimal(r.Cells["Amount"].Value.ToString());
if (d < 0)
{
break;
}
Amount -= d;
}
would exit the loop when the first negative amount is found.
Exactly what you need we can't say!