I thought I was doing something really simple, have an Infragistics UltraWinGrid and a column chooser. I listened to the event AfterColPosChanged and checked the ColumnHeader to get the VisiblePosition. As a test I pulled all the columns off the grid onto the column chooser. Then pulled two columns back on to the grid while looking at the VisiblePosition, first column = 1 second column = 4. Looking at it puzzled I realized that these would be the VisiblePositions if all columns were pulled back onto the grid from the column chooser. So the VisiblePosition is not the actual VisiblePosition but the what if all columns were visible VisiblePosition.
One thing to note is that the VisiblePosition problem described above is only noticeable when using the column chooser and adding and removing columns. It seems that moving column position from within the grid gives the correct VisiblePosition.
So how do you work with it? Trying to keep track of the actual visible position is a losing battle when the user is able to move column positions and using the column chooser. You have to not care about true VisiblePosition and yes this does sound stupid. By looking at both the visible position and if the column is visible you can get the correct order of columns, but not the true visible positions.