From dcb861dac6a7e8c439444f9da98e26bcf883d51c Mon Sep 17 00:00:00 2001 From: "Leaf Shi (BEYONDSOFT CONSULTING INC)" Date: Fri, 25 Jul 2025 11:12:12 +0800 Subject: [PATCH 1/2] Use logical judgment instead of assertion in method ComputeVisibleColumns of DataGridView.Methods to avoid null reference exception --- .../DataGridView/DataGridView.Methods.cs | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) 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..f22cddca18f 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,19 @@ 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 && 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 From 2bd21b6aed993e3f28bff0f6ed1a17a0400f5f6d Mon Sep 17 00:00:00 2001 From: Leaf Shi <132890443+LeafShi1@users.noreply.github.com> Date: Mon, 28 Jul 2025 08:58:24 +0800 Subject: [PATCH 2/2] Update DataGridView.Methods.cs --- .../Forms/Controls/DataGridView/DataGridView.Methods.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 f22cddca18f..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 @@ -4702,8 +4702,9 @@ private void ComputeVisibleColumns() // 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 && dataGridViewColumn.Thickness > displayWidth - cx) + if (dataGridViewColumn is not null) { + Debug.Assert(dataGridViewColumn.Thickness > displayWidth - cx); firstDisplayedScrollingCol = dataGridViewColumn.Index; FirstDisplayedScrollingColumnHiddenWidth = dataGridViewColumn.Thickness - displayWidth + cx; _horizontalOffset -= displayWidth - cx;