khwaja,
You can't perform vertical/aggregate calculations (ie. sum(), avg() max(), etc) on controls themselves. As Ron pointed out, watch out for the naming issue. A good idea, if you use the wizard to create the report, is to run a for/each loop over all the textboxes to prefix them with "txt". This avoids any confusion or contention--access makes an assumtion, if the source and Control are named the same, as to which one it chooses (I forgot which takes priority since I always prefix with 'txt').
If you need you can go further and prefix group-level controls with, ie, "txtCusFtr", say for Customer Footer, so you'd have the sales total in the detail be "txtCusFtrSales" with a ControlSource of Sum([Sales]). Up in the detail, there'd be a field "txtSales", with source [Sales].
This can help in horizontal caclulations, if performance is an issue. For example, in the Customer Footer:
"txtCusFtrSales" + "txtCusFtrTax" - "txtCusFtrReturns"
..will calculate faster than:
sum(sales) + sum(tax) - sum(Returns)
...since we've already done the Sum()'s--why do them twice? If this horizontal calc can be done in the query, which in this case it can, then all the better--you'd just do Sum([Field in Query that adds sales & tax less returns])
So, I will second Ron's point about the query--you should do as much of the pre-calculations as possible in the query, but avoid doing any sorting or grouping in the query--you're best leaving that to the report. ie if you have a query sorted by ID, and then sort the report by ID, it will sort twice--the Report engine creates it's own internal Aggregate (Group By) query behind the scenes, so avoid double work.
--Jim