This is an old question but there wasn't ever a good solution/answer and probably never will be but I will add the next best thing. I came across this in my search but ended up solving it myself, so I'm adding an answer to any other poor soul that comes across this in need of help.
Unfortunately with the way the DataGridView (DGV) is it won't allow you to increase the width of the last column if it is against the width of the control itself (as in it's added horizontal scrollbars as the columns are wider than the control). If your total columns weren't wider than the control, you could widen that last column UNTIL you get to the width of the control. So how I solved it:
- Place the DGV inside a Panel and dock it to fill.
- After loading your data into the DGV, add this line of code (changing Panel1 if you rename it)
Panel1.AutoScrollMinSize = New Size(Integer.Parse(grd.Columns.GetColumnsWidth(DataGridViewElementStates.Visible)) + 200, 0)
I used +200 but you can do what you like. What this will do is make the panel min scroll width to be wider than your total column widths allowing extra space for you to now widen the last column. It also benefits as you don't need any spacer column potentially ruining your DGV.
- If you want to cover all bases, then you should also add that same line of code to the
grd_ColumnWidthChanged
event so when you do resize a column, the panel resizes so it's always wider. You may need to consider any other event if you hide/show columns etc.