Yes, that's the only way.
How else could you possibly do it, other than setting the header captions in code?
I also need to localize column headers. Is the only solution to loop through every column header caption and search the text inside comparing it to the language resources?
My schema is unknown until run-time.
Why didn't you set the HeaderCaption property ?
Navigate to the correct Band.
Select Columns Line under the Band.
Select the column you want to rename.
In the properties grid, select Header > Header Caption.
Customize the string.
Press Apply.
You don't need to re-bind the grid in order to do this; you can set the column.Header.Caption to whatever you want. As for the menu controls (i.e. Toolbars), if you're adding the menu items yourself, then you should be able to change those items. If you need to change the text of items that are there by default, then you need to use the resource strings as has been mentioned in previous posts.
-Matt