關於列寬調整找到四個屬性,看似都與列寬有關,但實際上關系好像比較復雜,針對性的做了一下測試。測試結果見最后。
此外,找到了一個非常好的方法:
dataGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.ColumnHeader);
從參數可以看出他的可以在不改變AutoSizeColumnsMode的前提下,進行DataGridViewAutoSizeColumnsMode枚舉類型的一次性列寬調整。非常實用!
當然,應該僅限於AutoSizeColumnsMode為None或Fill下才可調整。
1. AllowUserToResizeColumns
獲取或設置一個值,該值指示用戶是否可以調整列的大小。
2. Frozen
獲取或設置一個值,指示當用戶水平滾動 DataGridView 控件時,列是否移動。
不影響手工調整列寬。
3. Resizable
獲取或設置一個值,指示該列的大小是否可調。
如果 Resizable 屬性為 False,用戶將不能手動調整列寬度。
默認情況下,Resizable 屬性值將根據 DataGridView.AllowUserToResizeColumns 屬性值而定。 但是,如果顯式地將 Resizable 設置為 True 或 False,此控件值會被忽略。 將 Resizable 設置為 NotSet 可恢復值的繼承行為。
因為 NotSet 恢復了值繼承,所以除非尚未向 DataGridView 控件添加該列,否則 Resizable 屬性將永遠不會返回 NotSet 值。 如果您需要確定列的 Resizable 屬性值是否是繼承而來的,請選中該列的 State 屬性。 如果 State 屬性值包括 ResizableSet 標記,則 Resizable 屬性值不是繼承而來的。
DataGridViewTriState:
|
False
|
此屬性的狀態為 false。
|
|
NotSet
|
此屬性尚未設置,將采用默認方式。
|
|
True
|
此屬性的狀態為 true。
|
4. AutoSizeColumnsMode
要更改單個列的大小調整模式,請設置該列的 AutoSizeMode 屬性。此屬性的默認值為 NotSet,這指示此列從控件繼承它的行為和 InheritedAutoSizeMode 屬性值。
處於填充模式下的列按照其 FillWeight 屬性值所指示的比例對可用控件寬度進行划分。可用於填充模式的寬度由某一個值決定,該值等於控件工作區的寬度減去其他所有列的寬度。如果此寬度小於所有填充模式列的 MinimumWidth 值的總和,則將顯示水平滾動條,所有填充模式列都按其最小寬度顯示,而且用戶對列進行調整的功能將被禁用。有關列填充模式的更多信息,請參見 Windows 窗體 DataGridView 控件中的列填充模式。
只能自動調整 Visible 屬性值為 true 的列的大小,更改列的可見性不會導致進行大小調整。另外,在列設置為自動調整大小時,用戶不能用鼠標調整列寬。
要以編程方式調整列寬,請使用 AutoResizeColumn 或 AutoResizeColumns 方法,或者設置列的 Width 屬性。
4.1 DataGridViewAutoSizeColumnsMode 枚舉
DataGridView 控件可以調整它的列的大小,使它們填充控件的可用水平寬度,或使它們顯示所有單元格或指定單元格的全部內容。
使用 Fill 模式時,通過調整該模式中所有列的大小來確定一個列的首選寬度,這樣控件中的所有可見列將准確填充可用顯示區域的水平寬度。使用其他模式時,首選列寬為顯示該列中所有單元格或單元格子集(如當前顯示行中的單元格子集)的最大單元格值所需的最小寬度。使用單元格子集來確定新的寬度有利於在處理多個數據行時避免性能下降。
基於內容的自動大小調整可以防止用戶使用鼠標調整列寬。但是在填充模式下,用戶可以調整大小。
此枚舉由 DataGridView 控件的 AutoSizeColumnsMode 屬性和 AutoResizeColumns 方法使用。
5. 測試結果
|
AutoSizeColumnsMode (DGV屬性)
|
允許設置列寬
|
AllowUserToResizeColumns (DGV屬性)
|
Resizable (DGVC屬性)
|
|
None
|
是
|
有效(對整個DGV生效,高於Resizable)
|
有效
|
|
ColumnHeader
|
否
|
無效
|
無效
|
|
AllCellsExceptHeader
|
否
|
無效
|
無效
|
|
AllCells
|
否
|
無效
|
無效
|
|
DisplayedCellsExceptHeader
|
否
|
無效
|
無效
|
|
DisplayedCells
|
否
|
無效
|
無效
|
|
Fill
|
是
|
有效(對整個DGV生效,高於Resizable)
|
有效
|
總結,如果需要手工調整列寬,則必須選擇AutoSizeColumnsMode下None或Fill模式,之后AllowUserToResizeColumns =True,再次通過列屬性Resizable對各列進行設置。
Frozen不影響手工調整列寬。
6. DataGridView.AutoResizeColumns方法
|
AutoResizeColumns()
|
調整寬度,以適合其所有儲存格,包括標題儲存格內容的所有資料行。
|
|
AutoResizeColumns(DataGridViewAutoSizeColumnsMode)
|
調整寬度,使用指定的大小模式的所有資料行。
|
|
AutoResizeColumns(DataGridViewAutoSizeColumnsMode, Boolean)
|
調整寬度,使用指定的大小模式中,選擇性地計算寬度,並在預期接下來將調整資料列高度的情況的所有資料行。
|
這個方法會很有用,如果您要控制何時調整資料行的大小。 資料行寬度會一次調整每個方法呼叫。 如果稍後在資料行的內容變更,資料行就不會自動調整。 若要調整大小的特定資料行,請使用AutoResizeColumn方法。 若要設定的資料行自動調整內容變更時,使用AutoSizeColumnsMode屬性或資料行AutoSizeMode屬性。
這個多載可讓您指定調整大小模式,用來計算一組有限的儲存格,例如,只有顯示資料列中的值計算新的寬度。 當控制項包含大量的資料列,這樣可以改善效能。
