Changing the background color of rows in the RadGridView this way can be problematic as the visual element for specific rows is not guaranteed to be available unless you access it through the formatting event. Also, in experimenting with the RadGridView, I've noticed that it seems to be reusing the same few visual elements in an effort to increase performance and decrease memory usage. This means that if you set the BackColor up front, it will be permanently set based on the initial set of visible rows. You won't be able to format the rows based on their values.
i.e. If I have a RadGridView with 20 rows and only 10 rows are visible up front, I will have access to set 10 visual elements. The visual elements for the rest of the rows will be null. When I use the scroll bar to scroll through the records, the initial 10 visual elements will be re-used for all records I scroll through. Therefor, if I don't set them again, they will remain their initial color.
Also, there is the case where if your application is resizable, the RadGridView will need to create new visual elements if its size increases. These elements will not have been set in your initial foreach loop.
I think the best/safest route for you to take is using the RowFormatting event as described here:
I hope this information helps.