DataGridView Column Width Grow Only Sizing - xfgr.com Click here to Skip to main content
 

DataGridView Column Width Grow Only Sizing

A simple way to create a grow only Column Width routine
Sign Up to vote for this article
Add a reason or comment to your vote: x
0
answers
4.6/5
6 votes
351
views

I was using a bound DataGridView to display a large number of records, with varying data widths in each column.

Initially, I was autosizing all the columns on data load, but with thousands of results, this was causing a lag when the data was loaded.

I then switched to autosizing only when the user scrolled the data, and on the displayed data, however this had the undersirable effect of making the columns all jump around (grow/shrink) as the user scrolled up and down the data.

I decided the best approach was a growing only column width, so as each column encountered longer data, the columns would be resized to fit the new data, but would not shrink again.

This worked great, improved the data load time, and resulted in a happy balance between visuals, usability and data load.

To achieve this, the DataGridView has Column AutoSizeColumMode set to DisplayedCells in the design environment, this caters for the first instance the data is bound to the DataGridView. Then, in the scroll event, turn this setting off as it is no longer required, and run the following snippet. DataResults is the name of my DataGridView
    Private Sub DataResults_Scroll(ByVal sender As Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles DataResults.Scroll
'Turn off Autosize, only used during the first data load.
DataResults.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None

'Get the preffered width for displayed data against each column and compare to current width
'Set the new column width only if greater than current
For Each column As DataGridViewColumn In DataResults.Columns
If column.GetPreferredWidth(DataGridViewAutoSizeColumnMode.DisplayedCells, True) > column.Width Then column.Width = column.GetPreferredWidth(DataGridViewAutoSizeColumnMode.DisplayedCells, True)
End If Next End Sub
Posted 20 Jun '10 2:38 AM
daveauld15.5K
Edited 20 Jun '10 7:25 AM
Revision 2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Hint: For improved responsiveness use Internet Explorer 4, Firefox or above. Ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
FAQ FAQ   
Noise Tolerance  Layout  Per page   
  (Refresh) 
-- There are no messages in this forum --

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   


 
Last Updated 26 Mar 2009
Web24 2.3.0027 Advertise Privacy