Windows Form DataGridView 控制項中的調整大小選項
本文內容
DataGridView 資料列、資料行和標頭會因為許多不同情況而變更大小。 下表列出這些運情況。
發生事項 | 描述 |
---|---|
使用者調整大小 | 使用者可以拖曳或按兩下資料列、資料行或標頭分格線來調整大小。 |
控件項調整大小 | 在資料行填滿模式中,當控制項寬度變更時,資料行寬度會變更;例如,當控件項停留在其父系表單,而使用者調整表單大小時。 |
儲存格值變更 | 在以內容為基礎的自動調整大小模式中,會變更大小以符合新的顯示值。 |
方法呼叫 | 以內容為基礎的調整大小可讓您根據方法呼叫時的儲存格值進行隨機性大小調整。 |
屬性設定 | 您也可以設定特定的高度和寬度值。 |
根據預設,會啟用使用者調整大小、停用自動調整大小,而且會裁剪大於其資料行的儲存格值。
下表顯示您可以用來調整預設行為的案例,或使用特定的重設大小選項來達成特定效果。
案例 | 實作 |
---|---|
使用資料行填滿模式,在佔用控制項整個寬度的資料行中顯示大小類似的資料,而不顯示水平捲軸。 | 將 AutoSizeColumnsMode 屬性設為 Fill。 |
使用資料行填滿模式搭配不同大小的顯示值。 | 將 AutoSizeColumnsMode 屬性設為 Fill。 藉由設定資料行 FillWeight 屬性,或在填入資料後呼叫控制項 AutoResizeColumns 方法,初始化相對資料行寬度。 |
使用具有不同重要性的值資料行填滿模式。 | 將 AutoSizeColumnsMode 屬性設為 Fill。 設定資料行的大型 MinimumWidth 值,這些資料行必須一律顯示部分資料,或使用特定資料行填滿模式以外的調整大小選項。 |
使用資料行填滿模式以避免顯示控制項背景。 | 將最後一個資料行的 AutoSizeMode 屬性設定為 Fill ,並使用其他資料行的其他調整大小選項。 如果其他資料行使用太多可用空間,請設定最後一個資料行的 MinimumWidth 屬性。 |
顯示固定寬度的資料行,例如圖示或識別碼資料行。 | 將 AutoSizeMode 設定為 None,並將 Resizable 設定為資料行 False。 藉由設定 Width 屬性,或在填入資料後呼叫控制項 AutoResizeColumn 方法,初始化其寬度。 |
每當儲存格內容變更時,會自動調整大小,以避免裁剪並最佳化空間的使用。 | 將自動調整大小屬性設定為代表以內容為基礎的調整大小模式的值。 若要避免在處理大量資料時效能降低,請使用只計算顯示資料列的大小調整模式。 |
調整大小以符合顯示資料列中的值,以避免在使用許多資料列時發生效能降低。 | 使用適當的調整大小模式列舉值搭配自動或以程序設計方式調整大小。 若要在捲動時調整大小以符合新顯示資料列中的值,請在 Scroll 事件處理常式中呼叫調整大小方法。 若要自訂使用者按兩下調整大小,只讓顯示資料列中的值決定新的大小,請在 RowDividerDoubleClick 或 ColumnDividerDoubleClick 事件處理常式中呼叫調整大小方法。 |
調整大小以只在特定時間調整儲存格內容,以避免效能降低或讓使用者調整大小。 | 在事件處理常式中呼叫以內容為基礎的調整大小方法。 例如,使用 DataBindingComplete 事件在繫結之後初始化大小,並處理 CellValidated 或 CellValueChanged 事件來調整大小,以補償繫結資料來源中的使用者編輯或變更。 |
調整多行儲存格內容的資料列高度。 | 請確定資料行寬度適用於顯示文字段落,並使用自動或程式設計以內容為基礎的資料列調整大小來調整高度。 也請確定具有多行內容的儲存格會使用 True 的 WrapMode 儲存格樣式值來顯示。 一般而言,您將使用自動資料行調整大小模式來維持資料行寬度,或在調整資料列高度之前將其設定為特定寬度。 |
根據預設,使用者可以根據儲存格值來調整資料列、資料行和標頭的大小,而不使用自動調整大小模式。 若要防止使用者調整其他模式的大小,例如資料行填滿模式,請設定下列一或多個 DataGridView 屬性:
您也可以藉由設定其 Resizable 屬性,防止使用者調整個別資料列或資料行的大小。 根據預設,Resizable 屬性值是根據資料行的 AllowUserToResizeColumns 屬性值,以及資料列的 AllowUserToResizeRows 屬性值。 如果您明確將 Resizable 設定為 True 或 False,但是,指定的值會覆寫該資料列或資料行的控制項值。 將 Resizable 設定為 NotSet 以還原繼承。
由於 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 屬性或控制項 RowHeadersVisible 或 ColumnHeadersVisible 屬性設定為 false
。 例如,如果資料行在自動調整大小以符合大型儲存格值之後隱藏,如果刪除包含大型儲存格值的資料列,則隱藏的資料行將不會變更其大小。 當可見性變更時,不會發生自動調整大小,因此將資料行 Visible 屬性變更回 true
不會強制根據目前內容重新計算其大小。
以內容為基礎的調整大小會影響資料列、資料行和標頭,而不論其可見度為何。
停用自動調整大小時,您可以透過下列屬性,以程式設計方式設定資料列、資料行或標頭的確切寬度或高度:
您也可以使用下列方法,以程式設計方式調整資料列、資料行和標頭的大小,以符合其內容:
這些方法會調整資料列、資料行或標頭的大小一次,而不是設定以進行連續調整大小。 新的大小會自動計算,以顯示所有儲存格內容,不會進行裁剪。 當您以程式設計方式調整 InheritedAutoSizeMode 屬性值為 Fill的資料行時,計算的內容寬度會用來按比例調整資料行 FillWeight 屬性值,然後根據這些新比例計算實際資料行寬度,讓所有資料行填滿控制項的可用顯示區域。
以程式設計方式調整大小有助於避免持續調整大小的效能降低。 為使用者可調整大小的資料列、資料行和標頭,以及資料行填滿模式提供初始大小也很有用。
您通常會在特定時間呼叫程式設計調整大小的方法。 例如,您可以在載入資料後立即以程式設計方式調整所有資料行的大小,或是在修改特定儲存格值之後,以程式設計方式調整特定資料列的大小。
您可以使用衍生 DataGridView 單元格、資料列和資料行類型,覆寫 DataGridViewCell.GetPreferredSize、DataGridViewRow.GetPreferredHeight 或 DataGridViewColumn.GetPreferredWidth 方法,或在衍生 DataGridView 控制項中呼叫受保護的調整大小方法過載,來自訂調整大小行為。 受保護的調整大小方法過載設計為成對運作,以達到理想的儲存格高度與寬度比例,避免儲存格過高或過寬。 例如,如果您呼叫 AutoResizeRows 方法的 AutoResizeRows(DataGridViewAutoSizeRowsMode,Boolean)
過載,並傳入 Boolean 參數的 false
值,過載會計算資料列中儲存格的理想高度和寬度,但只會調整資料列高度。 然後,您必須呼叫 AutoResizeColumns 方法,將資料行寬度調整為計算出的理想值。
調整大小屬性和方法所使用的列舉,對於以內容為基礎的調整大小具有類似的值。 使用這些值,您可以限制哪些儲存格用來計算慣用的大小。 對於所有調整大小列舉,具有所顯示儲存格名稱的值會將其計算限制為顯示資料列中的儲存格。 排除資料列有助於避免在處理大量資料列時降低效能。 您也可以將計算限制為標頭或非標頭儲存格中的儲存格值。
- DataGridView
- DataGridView.AllowUserToResizeColumns
- DataGridView.AllowUserToResizeRows
- DataGridView.ColumnHeadersHeightSizeMode
- DataGridView.RowHeadersWidthSizeMode
- DataGridViewBand.Resizable
- DataGridView.AutoSizeColumnsMode
- DataGridView.AutoSizeRowsMode
- DataGridViewColumn.AutoSizeMode
- DataGridViewColumn.InheritedAutoSizeMode
- DataGridView.RowHeadersWidth
- DataGridView.ColumnHeadersHeight
- DataGridViewRow.Height
- DataGridViewColumn.Width
- DataGridView.AutoResizeColumn
- DataGridView.AutoResizeColumns
- DataGridView.AutoResizeColumnHeadersHeight
- DataGridView.AutoResizeRow
- DataGridView.AutoResizeRows
- DataGridView.AutoResizeRowHeadersWidth
- DataGridViewAutoSizeRowMode
- DataGridViewAutoSizeRowsMode
- DataGridViewAutoSizeColumnMode
- DataGridViewAutoSizeColumnsMode
- DataGridViewColumnHeadersHeightSizeMode
- DataGridViewRowHeadersWidthSizeMode
- 調整 Windows Forms DataGridView 控制項中資料行和資料列的大小
- Windows Forms DataGridView 控制項中的資料行填入模式
- 操作說明:設定 Windows Forms DataGridView 控制項的縮放模式