To reproduce:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.CategoriesTableAdapter.Fill(Me.NwindDataSet.Categories)
Me.RadGridView1.DataSource = Me.CategoriesBindingSource
Dim viewDef As New ColumnGroupsViewDefinition
Dim group1 = New GridViewColumnGroup()
Dim row1 = New GridViewColumnGroupRow
group1.Rows.Add(row1)
row1.ColumnNames.Add("CategoryID")
row1.ColumnNames.Add("CategoryName")
viewDef.ColumnGroups.Add(group1)
Dim group2 = New GridViewColumnGroup()
Dim row2 = New GridViewColumnGroupRow
group2.Rows.Add(row2)
row2.ColumnNames.Add("Description")
row2.ColumnNames.Add("Picture")
viewDef.ColumnGroups.Add(group2)
Me.RadGridView1.ViewDefinition = viewDef
End Sub
Private Sub RadButton1_Click(sender As Object, e As EventArgs) Handles RadButton1.Click
Console.WriteLine("BEFORE >>")
For Each col As GridViewColumn In Me.RadGridView1.Columns
Console.WriteLine(col.Name & " >> " & col.Width )
Next
Dim style As New GridPrintStyle()
style.FitWidthMode = PrintFitWidthMode.FitPageWidth
Me.RadGridView1.PrintStyle = style
Me.RadGridView1.PrintPreview()
Console.WriteLine("AFTER >>")
For Each col As GridViewColumn In Me.RadGridView1.Columns
Console.WriteLine(col.Name & " >> " & col.Width)
Next
End Sub
IMPORTANT: If you resize one of the columns at run time before calling the PrintPreview method, the columns' width is restored. In addition, if you call the PrintPreview method without resizing the columns before that, close the dialog and hide one of the columns by using the default context menu, the columns' width for the visible columns is enlarged.
Workaround: you can get the columns width by using the ColumnGroupRowLayout:
Dim rowLayout As ColumnGroupRowLayout = TryCast(Me.RadGridView1.TableElement.ViewElement.RowLayout, ColumnGroupRowLayout)
For Each col As GridViewColumn In Me.RadGridView1.Columns
Dim info As ColumnGroupsCellArrangeInfo = rowLayout.GetColumnData(col)
Debug.WriteLine(col.Name & " >> " & info.Bounds.Width)
Next