diff --git a/src/System.Windows.Forms/System/Windows/Forms/Controls/DataGridView/DataGridView.Methods.cs b/src/System.Windows.Forms/System/Windows/Forms/Controls/DataGridView/DataGridView.Methods.cs index 00414cb9717..b6133ce0ad1 100644 --- a/src/System.Windows.Forms/System/Windows/Forms/Controls/DataGridView/DataGridView.Methods.cs +++ b/src/System.Windows.Forms/System/Windows/Forms/Controls/DataGridView/DataGridView.Methods.cs @@ -4699,15 +4699,20 @@ private void ComputeVisibleColumns() (Columns[firstDisplayedScrollingCol]), DataGridViewElementStates.Visible, DataGridViewElementStates.Frozen); - ThrowInvalidOperationExceptionIfNull(dataGridViewColumn); - Debug.Assert(dataGridViewColumn.Thickness > displayWidth - cx); - firstDisplayedScrollingCol = dataGridViewColumn.Index; - FirstDisplayedScrollingColumnHiddenWidth = dataGridViewColumn.Thickness - displayWidth + cx; - _horizontalOffset -= displayWidth - cx; - visibleScrollingColumnsTmp++; - invalidate = true; - cx = displayWidth; - Debug.Assert(FirstDisplayedScrollingColumnHiddenWidth == GetNegOffsetFromHorizontalOffset(_horizontalOffset)); + + // If a valid previous column is found and its width exceeds the remaining displayable space, + // then perform a partial scroll. + if (dataGridViewColumn is not null) + { + Debug.Assert(dataGridViewColumn.Thickness > displayWidth - cx); + firstDisplayedScrollingCol = dataGridViewColumn.Index; + FirstDisplayedScrollingColumnHiddenWidth = dataGridViewColumn.Thickness - displayWidth + cx; + _horizontalOffset -= displayWidth - cx; + visibleScrollingColumnsTmp++; + invalidate = true; + cx = displayWidth; + Debug.Assert(FirstDisplayedScrollingColumnHiddenWidth == GetNegOffsetFromHorizontalOffset(_horizontalOffset)); + } } // update the number of visible columns to the new reality