Windows フォーム DataGridView コントロールのサイズ変更オプションSizing Options in the Windows Forms DataGridView Control

DataGridView行、列、およびヘッダーは、さまざまな発生の結果としてサイズを変更できます。DataGridView rows, columns, and headers can change size as a result of many different occurrences. 次の表は、これらの出現を示しています。The following table shows these occurrences.

見つかるOccurrence 説明Description
ユーザーのサイズ変更User resize ユーザーは、行、列、またはヘッダーの区切り線をドラッグまたはダブルクリックしてサイズ調整を行うことができます。Users can make size adjustments by dragging or double-clicking row, column, or header dividers.
コントロールのサイズ変更Control resize 列の塗りつぶしモードでは、コントロールの幅が変化したときに列幅が変化します。たとえば、コントロールが親フォームにドッキングされ、ユーザーがフォームのサイズを変更した場合などです。In column fill mode, column widths change when the control width changes; for example, when the control is docked to its parent form and the user resizes the form.
セル値の変更Cell value change コンテンツベースの自動サイズ調整モードでは、新しい表示値に合わせてサイズが変更されます。In content-based automatic sizing modes, sizes change to fit new display values.
メソッド呼び出しMethod call プログラムによるコンテンツベースのサイズ変更では、メソッド呼び出し時のセル値に基づいて、便宜的なサイズ調整を行うことができます。Programmatic content-based resizing lets you make opportunistic size adjustments based on cell values at the time of the method call.
プロパティの設定Property setting また、特定の高さと幅の値を設定することもできます。You can also set specific height and width values.

既定では、ユーザーのサイズ変更が有効になり、自動サイズ調整が無効になり、列よりも幅の広いセル値がクリップされます。By default, user resizing is enabled, automatic sizing is disabled, and cell values that are wider than their columns are clipped.

次の表は、既定の動作を調整したり、特定のサイズ変更オプションを使用して特定の効果を実現するために使用できるシナリオを示しています。The following table shows scenarios that you can use to adjust the default behavior or to use specific sizing options to achieve particular effects.

シナリオScenario 実装Implementation
列の塗りつぶしモードは、水平スクロールバーを表示せずに、コントロールの幅全体を占める、比較的少数の列に同じサイズのデータを表示する場合に使用します。Use column fill mode for displaying similarly sized data in a relatively small number of columns that occupy the entire width of the control without displaying the horizontal scroll bar. AutoSizeColumnsMode プロパティを Fillに設定します。Set the AutoSizeColumnsMode property to Fill.
さまざまなサイズの表示値を使用して、列フィルモードを使用します。Use column fill mode with display values of varying sizes. AutoSizeColumnsMode プロパティを Fillに設定します。Set the AutoSizeColumnsMode property to Fill. FillWeightのプロパティを設定するか、コントロールにデータを格納しAutoResizeColumnsた後でコントロールメソッドを呼び出すことによって、列の相対幅を初期化します。Initialize relative column widths by setting the column FillWeight properties or by calling the control AutoResizeColumns method after filling the control with data.
列フィルモードは、さまざまな重要度の値と共に使用してください。Use column fill mode with values of varying importance. AutoSizeColumnsMode プロパティを Fillに設定します。Set the AutoSizeColumnsMode property to Fill. データのMinimumWidth一部を常に表示するか、特定の列に対して fill モード以外のサイズ変更オプションを使用する必要がある列に大きな値を設定します。Set large MinimumWidth values for columns that must always display some of their data or use a sizing option other than fill mode for specific columns.
コントロールの背景が表示されないようにするには、列フィルモードを使用します。Use column fill mode to avoid displaying the control background. 最後の列のFill プロパティをに設定し、他の列に対して他のサイズ変更オプションを使用します。AutoSizeModeSet the AutoSizeMode property of the last column to Fill and use other sizing options for the other columns. 他の列で使用可能な領域が多すぎる場合は、 MinimumWidth最後の列のプロパティを設定します。If the other columns use too much of the available space, set the MinimumWidth property of the last column.
固定幅の列 (アイコンや ID 列など) を表示します。Display a fixed-width column, such as an icon or ID column. 列のをにFalse設定AutoSizeMode Resizableし、をに設定します。 NoneSet AutoSizeMode to None and Resizable to False for the column. プロパティを設定するWidthか、コントロールにデータを入力した後でコントロールAutoResizeColumnメソッドを呼び出すことによって、幅を初期化します。Initialize its width by setting the Width property or by calling the control AutoResizeColumn method after filling the control with data.
クリッピングを回避し、領域の使用を最適化するためにセルの内容が変更されるたびに、サイズを自動的に調整します。Adjust sizes automatically whenever cell contents change to avoid clipping and to optimize the use of space. 自動サイズ変更プロパティを、コンテンツベースのサイズ変更モードを表す値に設定します。Set an automatic sizing property to a value that represents a content-based sizing mode. 大量のデータを処理するときにパフォーマンスが低下しないようにするには、表示されている行のみを計算するサイズ変更モードを使用します。To avoid a performance penalty when working with large amounts of data, use a sizing mode that calculates displayed rows only.
多数の行を処理するときにパフォーマンスが低下しないように、表示される行の値に合わせてサイズを調整します。Adjust sizes to fit values in displayed rows to avoid performance penalties when working with many rows. 自動またはプログラムによるサイズ変更で、適切なサイズ変更モードの列挙値を使用します。Use the appropriate sizing-mode enumeration values with automatic or programmatic resizing. スクロール中に新しく表示された行の値に合わせてサイズを調整するにScrollは、イベントハンドラーでサイズ変更メソッドを呼び出します。To adjust sizes to fit values in newly displayed rows while scrolling, call a resizing method in a Scroll event handler. ユーザーがダブルクリックしたサイズ変更をカスタマイズして、表示される行の値だけが新しいサイズを決定RowDividerDoubleClickできるColumnDividerDoubleClickようにするには、イベントハンドラーまたはイベントハンドラーでサイズ変更メソッドを呼び出します。To customize user double-click resizing so that only values in displayed rows determine the new sizes, call a resizing method in a RowDividerDoubleClick or ColumnDividerDoubleClick event handler.
パフォーマンスの低下を避けるため、またはユーザーのサイズ変更を可能にするために、特定の時点でのみセルの内容に合わせてサイズを調整します。Adjust sizes to fit cell contents only at specific times to avoid performance penalties or to enable user resizing. イベントハンドラーでコンテンツベースのサイズ変更メソッドを呼び出します。Call a content-based resizing method in an event handler. たとえば、 DataBindingCompleteイベントを使用して、バインド後のサイズを初期化し、 CellValueChangedイベントCellValidatedまたはイベントを処理して、バインドされたデータソースのユーザーの編集や変更に合わせてサイズを調整します。For example, use the DataBindingComplete event to initialize sizes after binding, and handle the CellValidated or CellValueChanged event to adjust sizes to compensate for user edits or changes in a bound data source.
複数行のセルの内容の行の高さを調整します。Adjust row heights for multiline cell contents. 列の幅がテキストの段落を表示するのに適していることを確認し、自動またはプログラムによるコンテンツベースの行のサイズ設定を使用して高さを調整します。Ensure that column widths are appropriate for displaying paragraphs of text and use automatic or programmatic content-based row sizing to adjust the heights. また、セルスタイルの値を使用して、 WrapMode複数行のTrueコンテンツを含むセルが表示されることを確認します。Also ensure that cells with multiline content are displayed using a WrapMode cell style value of True.

通常、列の幅を維持するには自動列サイズ変更モードを使用し、行の高さを調整する前に特定の幅に設定します。Typically, you will use an automatic column sizing mode to maintain column widths or set them to specific widths before row heights are adjusted.

マウスによるサイズ変更Resizing with the Mouse

既定では、ユーザーは、セル値に基づいて自動サイズ変更モードを使用しない行、列、およびヘッダーのサイズを変更できます。By default, users can resize rows, columns, and headers that do not use an automatic sizing mode based on cell values. 列の塗りつぶしモードなど、他のモードでユーザーのサイズを変更できないようにするにDataGridViewは、次のプロパティの1つまたは複数を設定します。To prevent users from resizing with other modes, such as column fill mode, set one or more of the following DataGridView properties:

また、ユーザーが個々の行や列のサイズを変更できResizableないようにするには、プロパティを設定します。You can also prevent users from resizing individual rows or columns by setting their Resizable properties. 既定Resizableでは、プロパティ値は、列のAllowUserToResizeColumnsプロパティAllowUserToResizeRows値と行のプロパティ値に基づいています。By default, the Resizable property value is based on the AllowUserToResizeColumns property value for columns and the AllowUserToResizeRows property value for rows. ただし、を明示ResizableTrueFalseまたはに設定した場合、指定された値はその行または列のコントロール値よりも優先されます。If you explicitly set Resizable to True or False, however, the specified value overrides the control value is for that row or column. 継承ResizableNotSet復元するには、に設定します。Set Resizable to NotSet to restore the inheritance.

は値の継承を復元するResizableためNotSet 、行またはNotSet列がコントロールに追加されていない場合、プロパティは値を返しません。DataGridViewBecause NotSet restores the value inheritance, the Resizable property will never return a NotSet value unless the row or column has not been added to a DataGridView control. 行または列のプロパティ値Resizableが継承されているかどうかを判断するState必要がある場合は、そのプロパティを調べます。If you need to determine whether the Resizable property value of a row or column is inherited, examine its State property. 値にState ResizableSetフラグが含まれているResizable場合、プロパティ値は継承されません。If the State value includes the ResizableSet flag, the Resizable property value is not inherited.

自動サイズ調整Automatic Sizing

DataGridViewコントロールには、列の塗りつぶしモードとコンテンツベースの自動サイズ調整という2種類の自動サイズ変更があります。There are two kinds of automatic sizing in the DataGridView control: column fill mode and content-based automatic sizing.

[列フィルモード] を指定すると、コントロールの表示列がコントロールの表示領域の幅に合わせて表示されます。Column fill mode causes the visible columns in the control to fill the width of the control's display area. このモードの詳細については、「 Windows フォーム DataGridView コントロールでの列の塗りつぶしモード」を参照してください。For more information about this mode, see Column Fill Mode in the Windows Forms DataGridView Control.

また、行、列、ヘッダーを構成して、セルの内容に合わせてサイズを自動的に調整することもできます。You can also configure rows, columns, and headers to automatically adjust their sizes to fit their cell contents. この場合、セルの内容が変更されるたびにサイズの調整が発生します。In this case, size adjustment occurs whenever cell contents change.

注意

仮想モードを使用してカスタムデータキャッシュのセル値を維持すると、ユーザーがセル値を編集したときに自動サイズ変更が発生しますが、 CellValuePushedイベントハンドラーの外部でキャッシュされた値を変更しても、自動サイズ調整は行われません。If you maintain cell values in a custom data cache using virtual mode, automatic sizing occurs when the user edits a cell value but does not occur when you alter a cached value outside of a CellValuePushed event handler. この場合は、 UpdateCellValueメソッドを呼び出して、コントロールにセルの表示を強制的に更新し、現在の自動サイズ変更モードを適用します。In this case, call the UpdateCellValue method to force the control to update the cell display and apply the current automatic sizing modes.

コンテンツベースの自動サイズ変更が1つのディメンションに対してのみ有効になっている場合 (つまり、行ではなく、列WrapModeでも、列でも有効になっていない場合) は、他のディメンションが変更されるたびにサイズの調整も行われます。If content-based automatic sizing is enabled for one dimension only—that is, for rows but not columns, or for columns but not rows—and WrapMode is also enabled, size adjustment also occurs whenever the other dimension changes. たとえば、列ではなく行を自動サイズWrapMode変更するように構成されていて、有効になっている場合、ユーザーは列の区切り線をドラッグして列の幅を変更することができ、行の高さはセルの内容が完全に表示されるように自動的に調整されます。For example, if rows but not columns are configured for automatic sizing and WrapMode is enabled, users can drag column dividers to change the width of a column and row heights will automatically adjust so that cell contents are still fully displayed.

コンテンツベースの自動サイズ変更用に行と列の両方をWrapMode構成し、有効DataGridViewにした場合、コントロールはセルの内容が変更されるたびにサイズを調整し、新しいサイズを計算するときに最適なセルの高さと幅の比率を使用します。If you configure both rows and columns for content-based automatic sizing and WrapMode is enabled, the DataGridView control will adjust sizes whenever cell contents changed and will use an ideal cell height-to-width ratio when calculating new sizes.

ヘッダーと行のサイズ変更モードと、コントロールの値をオーバーライドしない列のサイズ変更モードを構成するには、 DataGridView次のプロパティの1つまたは複数を設定します。To configure the sizing mode for headers and rows and for columns that do not override the control value, set one or more of the following DataGridView properties:

個々の列のコントロールの列のサイズ変更モードをオーバーライドするにAutoSizeModeは、そのプロパティを以外NotSetの値に設定します。To override the control's column sizing mode for an individual column, set its AutoSizeMode property to a value other than NotSet. 列のサイズ変更モードは、実際にはInheritedAutoSizeModeプロパティによって決定されます。The sizing mode for a column is actually determined by its InheritedAutoSizeMode property. このプロパティの値は、その値がAutoSizeMode NotSetである場合を除いて、列のプロパティ値に基づいていAutoSizeColumnsModeます。この場合、コントロールの値は継承されます。The value of this property is based on the column's AutoSizeMode property value unless that value is NotSet, in which case the control's AutoSizeColumnsMode value is inherited.

大量のデータを扱うときは、コンテンツベースの自動サイズ変更を慎重に使用してください。Use content-based automatic resizing with caution when working with large amounts of data. パフォーマンスの低下を回避するには、コントロールのすべての行を分析するのではなく、表示された行のみに基づいてサイズを計算する自動サイズ調整モードを使用します。To avoid performance penalties, use the automatic sizing modes that calculate sizes based only on the displayed rows rather than analyzing every row in the control. パフォーマンスを最大にするには、代わりにプログラムによるサイズ変更を使用します。これにより、新しいデータが読み込まれた直後など、特定の時間にサイズを変更できます。For maximum performance, use programmatic resizing instead so that you can resize at specific times, such as immediately after new data is loaded.

コンテンツベースの自動サイズ変更モードVisibleでは、行RowHeadersVisible ColumnHeadersVisible 、列、またはプロパティをに設定するfalseことによって、非表示になっている行、列、またはヘッダーには影響しません。Content-based automatic sizing modes do not affect rows, columns, or headers that you have hidden by setting the row or column Visible property or the control RowHeadersVisible or ColumnHeadersVisible properties to false. たとえば、大きなセル値に合わせて自動的にサイズが変更された後に列が非表示になっている場合、大きなセル値を含む行が削除されると、非表示の列のサイズは変更されません。For example, if a column is hidden after it is automatically sized to fit a large cell value, the hidden column will not change its size if the row containing the large cell value is deleted. 自動サイズ変更は、可視性が変更されたときVisibleには発生trueしません。そのため、列プロパティをに変更すると、現在のコンテンツに基づいて列のサイズが再計算されません。Automatic sizing does not occur when visibility changes, so changing the column Visible property back to true will not force it to recalculate its size based on its current contents.

プログラムによるコンテンツベースのサイズ変更は、表示に関係なく、行、列、およびヘッダーに影響します。Programmatic content-based resizing affects rows, columns, and headers regardless of their visibility.

プログラムによるサイズ変更Programmatic Resizing

自動サイズ変更が無効になっている場合は、次のプロパティを使用して、行、列、またはヘッダーの正確な幅または高さをプログラムで設定できます。When automatic sizing is disabled, you can programmatically set the exact width or height of rows, columns, or headers through the following properties:

次の方法を使用して、行、列、ヘッダーのサイズをプログラムによって内容に合わせて変更することもできます。You can also programmatically resize rows, columns, and headers to fit their contents using the following methods:

これらのメソッドでは、行、列、またはヘッダーのサイズを、連続したサイズ変更用に構成するのではなく、1回だけ変更します。These methods will resize rows, columns, or headers once rather than configuring them for continuous resizing. 新しいサイズは、すべてのセルの内容をクリッピングせずに表示するために自動的に計算されます。The new sizes are automatically calculated to display all cell contents without clipping. ただし、のプロパティ値を持つInheritedAutoSizeMode列のFillサイズをプログラムで変更する場合、列FillWeightのプロパティ値を比例して調整するために、計算されたコンテンツベースの幅が使用されます。実際の列の幅は、その後、これらの新しい比率に従って計算され、すべての列がコントロールの使用可能な表示領域に収まるようになります。When you programmatically resize columns that have InheritedAutoSizeMode property values of Fill, however, the calculated content-based widths are used to proportionally adjust the column FillWeight property values, and the actually column widths are then calculated according to these new proportions so that all columns fill the available display area of the control.

プログラムによるサイズ変更は、継続的なサイズ変更によるパフォーマンスの低下を回避するために役立ちます。Programmatic resizing is useful to avoid performance penalties with continuous resizing. また、ユーザーがサイズ変更可能な行、列、ヘッダー、および列の塗りつぶしモードの初期サイズを指定する場合にも役立ちます。It is also useful to provide initial sizes for user-resizable rows, columns, and headers, and for column fill mode.

通常は、特定のタイミングでプログラムによるサイズ変更メソッドを呼び出します。You will typically call the programmatic resizing methods at specific times. たとえば、データを読み込んだ直後にすべての列のサイズをプログラムで変更することも、特定のセルの値が変更された後に特定の行のサイズをプログラムで変更することもできます。For example, you might programmatically resize all columns immediately after loading data, or you might programmatically resize a specific row after a particular cell value has been modified.

コンテンツベースのサイズ変更動作のカスタマイズCustomizing Content-based Sizing Behavior

派生DataGridViewしたセル、行、および列の型を操作するときに、、、 DataGridViewCell.GetPreferredSizeまたDataGridViewRow.GetPreferredHeight DataGridViewColumn.GetPreferredWidthはの各メソッドをオーバーライドするか、派生クラスDataGridViewで保護されたサイズ変更メソッドのオーバーロードを呼び出すことによって、サイズ変更動作をカスタマイズできます。制御.You can customize sizing behaviors when working with derived DataGridView cell, row, and column types by overriding the DataGridViewCell.GetPreferredSize, DataGridViewRow.GetPreferredHeight, or DataGridViewColumn.GetPreferredWidth methods or by calling protected resizing method overloads in a derived DataGridView control. 保護されたサイズ変更メソッドのオーバーロードは、ペアで動作するように設計されています。これにより、セルの高さが非常に広くなるのを防ぐことができます。The protected resizing method overloads are designed to work in pairs to achieve an ideal cell height-to-width ratio, avoiding overly wide or tall cells. AutoResizeRows(DataGridViewAutoSizeRowsMode,Boolean)たとえば、 AutoResizeRowsメソッドのオーバーロードを呼び出し、 Booleanパラメーターにのfalse値を渡すと、オーバーロードによって、行内のセルの理想的な高さと幅が計算されますが、行の高さが調整されます。専用.For example, if you call the AutoResizeRows(DataGridViewAutoSizeRowsMode,Boolean) overload of the AutoResizeRows method and pass in a value of false for the Boolean parameter, the overload will calculate the ideal heights and widths for cells in the row, but it will adjust the row heights only. 次に、 AutoResizeColumnsメソッドを呼び出して、列の幅を最適な計算結果に調整する必要があります。You must then call the AutoResizeColumns method to adjust the column widths to the calculated ideal.

コンテンツベースのサイズ変更オプションContent-based Sizing Options

サイズ変更プロパティとメソッドによって使用される列挙体の値は、コンテンツベースのサイズ変更に似ています。The enumerations used by sizing properties and methods have similar values for content-based sizing. これらの値を使用すると、どのセルを使用して適切なサイズを計算するかを制限できます。With these values, you can limit which cells are used to calculate the preferred sizes. すべてのサイズ指定の列挙体では、表示されているセルを参照する名前を持つ値は、表示される行のセルに対する計算を制限します。For all sizing enumerations, values with names that refer to displayed cells limit their calculations to cells in displayed rows. 行を除外すると、大量の行を処理するときにパフォーマンスが低下しないようにするのに役立ちます。Excluding rows is useful to avoid a performance penalty when you are working with a large quantity of rows. また、ヘッダーまたは nonheader セルのセル値に対して計算を制限することもできます。You can also restrict calculations to cell values in header or nonheader cells.

関連項目See also