Again, without knowing the details of your code we can't give a code snippet type of answer, but what Trent was getting at with the shared property is basically this:
1) Add a shared (static) boolean property to your base business object called "InitFired" or some such which will be defaulted to False
2) In the init of your base business object, all logic should go inside of an If Test ("If Not InitFired Then ...").
3) Inside of that if test, you should set the InitFired property to True. That way, any subsequent firings of the init on the business objects will be negated (it will test on the initfired property, see that it is true, and skip all of the logic within)
The source of the problem is likely in that a new instance of the business object is created for each row in the grid. As such, each row is currently firing the init method for the business object. Using the above, any undesired inits should be bypassed. Keep in mind that you will need to reset the shared InitFired property yourself whenever appropriate (i.e. once the grid is fully populated).
Hope it helps
Dustin