DataGridViewAutoSizeColumnMode.Fill:
The column width adjusts so that the widths of all columns exactly fills the display area of the control.
So if your RowHeadersWidth is changed by this, its value depends on your font, display DPI and many other display settings. It should be calculated before paint dynamically, and thus it can not be calculated in your grid constructor.