Hi Nat,
The grid will create bands and columns based on the data source you assign it. There's really no way around that. You can hide the columns or bands. And you might be able to prevent the grid from loading bands past a certain depth by setting the MaxBandDepth property. But that won't help in this case if your bands are siblings or the ones you want to remove aren't necessarily the deepest.
There are some alternatives:
1) You could use an intermediary data source. In other words, some object that binds to the grid and has the data structure you want and acts as an intermeddiary between the grid and the "real" data source. The UltraDataSource can be used for this purpose and you could set it up to load data from your real data source on-demand. The UltraDataSource fires events to let you know it needs data or that data has been changed and then you have to write some code to provide the data or write it back to the "real" data source.
2) While the UltraGrid does not have the ability to remove a band, the UltraWinTree control does. So you might want to consider using a tree instead of a grid. The tree supports columns and sorting just like the grid. But the down side is that the tree lacks certain grid features like filtering, summaries, and exporting. So obviously this is not a good solution if you need those features.