Windows Form DataGridView 控制項中的調整大小選項

DataGridView 資料列、資料行和標頭可能會因為發生許多不同而變更大小。 下表顯示這些出現次數。

發生事項 描述
使用者調整大小 使用者可以拖曳或按兩下資料列、資料行或標頭分隔器來調整大小。
控制項調整大小 在資料行填滿模式中,當控制項寬度變更時,資料行寬度會變更;例如,當控制項停駐在其父表單,而使用者調整表單大小時。
儲存格值變更 在以內容為基礎的自動調整大小模式中,大小會變更以符合新的顯示值。
方法呼叫 以內容為基礎的調整大小可讓您根據方法呼叫時的資料格值進行機會性大小調整。
屬性設定 您也可以設定特定的高度和寬度值。

根據預設,會啟用使用者調整大小、停用自動調整大小,而且會裁剪大於其資料行的儲存格值。

下表顯示您可以用來調整預設行為的案例,或使用特定的調整大小選項來達成特定效果。

案例 實作
使用資料行填滿模式,在佔用控制項整個寬度的資料行中顯示大小類似的資料,而不顯示水準捲軸。 AutoSizeColumnsMode 屬性設為 Fill
使用資料行填滿模式搭配不同大小的顯示值。 AutoSizeColumnsMode 屬性設為 Fill。 藉由設定資料行 FillWeight 屬性,或在填入控制項資料之後呼叫 控制項 AutoResizeColumns 方法,初始化相對資料行寬度。
使用具有不同重要性值的資料行填滿模式。 AutoSizeColumnsMode 屬性設為 Fill。 針對必須一律顯示某些資料的資料行設定大型 MinimumWidth 值,或使用特定資料行填滿模式以外的調整大小選項。
使用資料行填滿模式以避免顯示控制項背景。 AutoSizeMode 最後一個資料行的 屬性設定為 Fill ,並使用其他資料行的其他調整大小選項。 如果其他資料行使用太多可用空間,請設定 MinimumWidth 最後一個資料行的 屬性。
顯示固定寬度的資料行,例如圖示或識別碼資料行。 針對資料行,將 設定 AutoSizeModeNoneResizableFalse 。 藉由設定 Width 屬性或在填入控制項資料之後呼叫 控制項 AutoResizeColumn 方法,初始化其寬度。
每當儲存格內容變更時,會自動調整大小,以避免裁剪並優化空間的使用。 將自動調整大小屬性設定為代表以內容為基礎的調整大小模式的值。 若要避免在處理大量資料時效能降低,請使用只計算顯示資料列的大小調整模式。
調整大小以符合顯示資料列中的值,以避免在使用許多資料列時發生效能損失。 使用適當的調整大小模式列舉值搭配自動或以程式設計方式調整大小。 若要在捲動時調整大小以符合新顯示資料列中的值,請在事件處理常式中 Scroll 呼叫調整大小方法。 若要自訂使用者按兩下調整大小,只讓顯示資料列中的值決定新的大小,請在 或 ColumnDividerDoubleClick 事件處理常式中 RowDividerDoubleClick 呼叫調整大小方法。
調整大小以只在特定時間調整儲存格內容,以避免效能降低或讓使用者調整大小。 在事件處理常式中呼叫以內容為基礎的調整大小方法。 例如,使用 DataBindingComplete 事件在系結之後初始化大小,並處理 CellValidatedCellValueChanged 事件來調整大小,以補償使用者編輯或變更系結資料來源中的變更。
調整多行儲存格內容的資料列高度。 請確定資料行寬度適用于顯示文欄位落,並使用自動或程式設計的內容型資料列調整大小來調整高度。 也請確定具有多行內容的儲存格會使用 WrapModeTrue 儲存格樣式值來顯示。

一般而言,您將使用自動資料行調整大小模式來維持資料行寬度,或在調整資料列高度之前將其設定為特定寬度。

使用滑鼠調整大小

根據預設,使用者可以根據儲存格值來調整資料列、資料行和標頭的大小,而不使用自動調整大小模式。 若要防止使用者使用其他模式調整大小,例如資料行填滿模式,請設定下列 DataGridView 一或多個屬性:

您也可以藉由設定其 Resizable 屬性,防止使用者調整個別資料列或資料行的大小。 根據預設, Resizable 屬性值是以 AllowUserToResizeColumns 資料行的屬性值和資料 AllowUserToResizeRows 列的屬性值為基礎。 不過,如果您明確設定 ResizableTrueFalse ,則指定的值會覆寫該資料列或資料行的控制項值。 設定 ResizableNotSet 以還原繼承。

因為 NotSet 會還原值繼承,除非資料列或資料行尚未加入 DataGridView 控制項, Resizable 否則屬性永遠不會傳回 NotSet 值。 如果您需要判斷 Resizable 是否繼承資料列或資料行的屬性值,請檢查其 State 屬性。 State如果值包含 ResizableSet 旗標, Resizable 則不會繼承屬性值。

自動調整大小

控制項中有 DataGridView 兩種自動調整大小:資料行填滿模式和以內容為基礎的自動調整大小。

資料行填滿模式會使控制項中的可見資料行填滿控制項顯示區域的寬度。 如需此模式的詳細資訊,請參閱 Windows Forms DataGridView 控制項 中的資料行填滿模式。

您也可以設定資料列、資料行和標頭,以自動調整其大小以符合其儲存格內容。 在此情況下,每當儲存格內容變更時,就會進行大小調整。

注意

如果您使用虛擬模式在自訂資料快取中維護資料格值,當使用者編輯資料格值時,就會自動調整大小,但在事件處理常式外部 CellValuePushed 變更快取值時不會發生。 在此情況下,呼叫 UpdateCellValue 方法來強制控制項更新儲存格顯示,並套用目前的自動調整大小模式。

如果只針對一個維度啟用內容型自動調整大小,也就是資料列而非資料行,或針對資料行,但未啟用資料列, WrapMode 而且也會啟用大小調整,每當其他維度變更時也會發生大小調整。 例如,如果資料列而非資料行已設定為自動調整大小並 WrapMode 啟用,則使用者可以拖曳資料行分隔線來變更資料行寬度,而資料列高度會自動調整,讓儲存格內容仍然完整顯示。

如果您同時設定以內容為基礎的自動調整大小的資料 WrapMode 列和資料行, DataGridView 則控制項會在儲存格內容變更時調整大小,並在計算新大小時使用理想的儲存格高度與寬度比例。

若要設定標頭和資料列的大小調整模式,以及未覆寫控制項值的資料行,請設定下列 DataGridView 一或多個屬性:

若要覆寫個別資料行的控制項資料行大小調整模式,請將其 AutoSizeMode 屬性設定為 以外的 NotSet 值。 資料行的大小調整模式實際上取決於其 InheritedAutoSizeMode 屬性。 此屬性的值是以資料行的屬性值為基礎 AutoSizeMode ,除非該值為 NotSet ,在此情況下會繼承控制項 AutoSizeColumnsMode 的值。

使用大量資料時,請謹慎使用以內容為基礎的自動調整大小。 若要避免效能損失,請使用自動調整大小模式,只根據顯示的資料列計算大小,而不是分析控制項中的每個資料列。 若要達到最大效能,請改用程式設計調整大小,以便在特定時間調整大小,例如在載入新資料之後立即調整大小。

以內容為基礎的自動調整大小模式不會影響您已隱藏的資料列、資料行或標頭,方法是將資料列或資料 Visible 行屬性或控制項 RowHeadersVisibleColumnHeadersVisible 屬性設定為 false 。 例如,如果資料行在自動調整大小以符合大型儲存格值之後隱藏,如果刪除包含大型儲存格值的資料列,則隱藏的資料行將不會變更其大小。 當可見度變更時,不會發生自動調整大小,因此將資料行 Visible 屬性變更回 true 不會強制根據目前內容重新計算其大小。

以內容為基礎的調整大小會影響資料列、資料行和標頭,而不論其可見度為何。

以程式設計方式調整大小

停用自動調整大小時,您可以透過下列屬性,以程式設計方式設定資料列、資料行或標頭的確切寬度或高度:

您也可以使用下列方法,以程式設計方式調整資料列、資料行和標頭的大小,以符合其內容:

這些方法會調整資料列、資料行或標頭的大小一次,而不是設定它們以進行連續調整大小。 新的大小會自動計算,以顯示所有儲存格內容,而不裁剪。 不過,當您以程式設計方式調整具有 InheritedAutoSizeMode 屬性值 Fill 的資料行時,計算的內容型寬度會用來按比例調整 FillWeight 資料行屬性值,然後根據這些新比例計算實際資料行寬度,讓所有資料行填滿控制項的可用顯示區域。

以程式設計方式調整大小有助於避免持續調整大小的效能。 為使用者可調整大小的資料列、資料行和標頭,以及資料行填滿模式提供初始大小也很有用。

您通常會在特定時間呼叫程式設計調整大小的方法。 例如,您可以在載入資料後立即以程式設計方式調整所有資料行的大小,或是在修改特定儲存格值之後,以程式設計方式調整特定資料列的大小。

自訂以內容為基礎的調整大小行為

您可以在使用衍生 DataGridView 儲存格、資料列和資料行類型時自訂調整大小行為,方法是覆寫 DataGridViewCell.GetPreferredSizeDataGridViewRow.GetPreferredHeightDataGridViewColumn.GetPreferredWidth 方法,或在衍生 DataGridView 控制項中呼叫受保護的調整大小方法多載。 受保護的調整大小方法多載是設計成對運作,以達到理想的儲存格高度與寬度比例,避免過度寬或高儲存格。 例如,如果您呼叫 AutoResizeRows(DataGridViewAutoSizeRowsMode,Boolean) 方法的多 AutoResizeRows 載並傳入 參數的值 falseBoolean ,多載會計算資料列中儲存格的理想高度和寬度,但只會調整資料列高度。 然後,您必須呼叫 AutoResizeColumns 方法,將資料行寬度調整為計算的理想。

以內容為基礎的調整大小選項

調整大小屬性和方法所使用的列舉,對於以內容為基礎的調整大小具有類似的值。 使用這些值,您可以限制哪些儲存格用來計算慣用的大小。 對於所有調整大小列舉,具有所顯示儲存格名稱的值會將其計算限制為顯示資料列中的儲存格。 排除資料列有助於避免在處理大量資料列時降低效能。 您也可以將計算限制為標頭或非標題儲存格中的儲存格值。

另請參閱