Windows フォーム DataGridView コントロール内の列の並べ替えモードColumn Sort Modes in the Windows Forms DataGridView Control

DataGridView列には3つの並べ替えモードがあります。DataGridView columns have three sort modes. 各列の並べ替えモードは、次SortMode DataGridViewColumnSortModeの列挙値のいずれかに設定できる、列のプロパティによって指定されます。The sort mode for each column is specified through the SortMode property of the column, which can be set to one of the following DataGridViewColumnSortMode enumeration values.

DataGridViewColumnSortMode の値DataGridViewColumnSortMode value 説明Description
Automatic テキストボックスの列の既定値。Default for text box columns. 列ヘッダーを選択に使用しない限り、列ヘッダーをクリックするDataGridViewと、自動的にこの列によってが並べ替えられ、並べ替え順序を示すグリフが表示されます。Unless column headers are used for selection, clicking the column header automatically sorts the DataGridView by this column and displays a glyph indicating the sort order.
NotSortable テキストボックス以外の列の既定値。Default for non–text box columns. この列はプログラムで並べ替えることができます。ただし、並べ替えのためのものではないため、並べ替えグリフ用の領域は予約されていません。You can sort this column programmatically; however, it is not intended for sorting, so no space is reserved for the sorting glyph.
Programmatic この列はプログラムで並べ替えることができ、領域は並べ替えグリフ用に予約されています。You can sort this column programmatically, and space is reserved for the sorting glyph.

意味のある順序付けが可能な値が含まれているNotSortable場合は、既定の列の並べ替えモードを変更することができます。You might want to change the sort mode for a column that defaults to NotSortable if it contains values that can be meaningfully ordered. たとえば、アイテムの状態を表す数値を含むデータベース列がある場合は、データベース列に画像列をバインドすることで、これらの数値を対応するアイコンとして表示できます。For example, if you have a database column containing numbers that represent item states, you can display these numbers as corresponding icons by binding an image column to the database column. その後、 DataGridView.CellFormattingイベントのハンドラーで数値セル値を画像表示値に変更できます。You can then change the numerical cell values into image display values in a handler for the DataGridView.CellFormatting event. この場合、 SortModeプロパティをに設定するAutomaticと、ユーザーが列を並べ替えることができるようになります。In this case, setting the SortMode property to Automatic will enable your users to sort the column. 自動並べ替えを使用すると、ユーザーは、数値に対応する状態に自然な順序が設定されていない場合でも、同じ状態の項目をグループ化できます。Automatic sorting will enable your users to group items that have the same state even if the states corresponding to the numbers do not have a natural sequence. チェックボックスの列は、同じ状態の項目をグループ化するために自動並べ替えが役立つもう1つの例です。Check box columns are another example where automatic sorting is useful for grouping items in the same state.

SortMode設定に関係なくDataGridView 、任意の列または複数の列の値によって、プログラムによってを並べ替えることができます。You can sort a DataGridView programmatically by the values in any column or in multiple columns, regardless of the SortMode settings. プログラムによる並べ替えは、並べ替えに独自のユーザーインターフェイス (UI) を提供したり、カスタムの並べ替えを実装したりする場合に便利です。Programmatic sorting is useful when you want to provide your own user interface (UI) for sorting or when you want to implement custom sorting. 列ヘッダーの選択を有効にするようにDataGridView選択モードを設定する場合などに、独自の並べ替え UI を提供すると便利です。Providing your own sorting UI is useful, for example, when you set the DataGridView selection mode to enable column header selection. この場合、列ヘッダーは並べ替えに使用できませんが、ヘッダーに適切な並べ替えグリフが表示されるようにするには、 SortModeプロパティをにProgrammatic設定します。In this case, although the column headers cannot be used for sorting, you still want the headers to display the appropriate sorting glyph, so you would set the SortMode property to Programmatic.

プログラムによる並べ替えモードに設定されている列は、並べ替えグリフを自動的に表示しません。Columns set to programmatic sort mode do not automatically display a sorting glyph. これらの列では、 DataGridViewColumnHeaderCell.SortGlyphDirectionプロパティを設定することによって、自分でグリフを表示する必要があります。For these columns, you must display the glyph yourself by setting the DataGridViewColumnHeaderCell.SortGlyphDirection property. これは、カスタムの並べ替えの柔軟性を必要とする場合に必要です。This is necessary if you want flexibility in custom sorting. たとえば、複数の列でをDataGridView並べ替える場合は、複数の並べ替えグリフを表示するか、並べ替えグリフを使用しないようにすることができます。For example, if you sort the DataGridView by multiple columns, you might want to display multiple sorting glyphs or no sorting glyph.

プログラムを使用して、 DataGridView任意の列でを並べ替えることができますが、ボタン列などの一部の列には、意味のある順序付けが可能な値が含まれていない場合があります。Although you can programmatically sort a DataGridView by any column, some columns, such as button columns, might not contain values that can be meaningfully ordered. これらの列の場合SortMode 、のNotSortableプロパティ設定は、並べ替えに使用されないことを示します。したがって、並べ替えグリフのヘッダーに領域を予約する必要はありません。For these columns, a SortMode property setting of NotSortable indicates that it will never be used for sorting, so there is no need to reserve space in the header for the sorting glyph.

が並べ替えられている場合は、プロパティSortedColumnSortOrderプロパティの値を確認することで、並べ替え列と並べ替え順序の両方を確認できます。 DataGridViewWhen a DataGridView is sorted, you can determine both the sort column and the sort order by checking the values of the SortedColumn and SortOrder properties. これらの値は、カスタムの並べ替え操作の後に意味がありません。These values are not meaningful after a custom sorting operation. カスタム並べ替えの詳細については、このトピックで後述する「カスタム並べ替え」セクションを参照してください。For more information about custom sorting, see the Custom Sorting section later in this topic.

バインドされた列とバインドされていない列の両方を含むコントロールを並べ替える場合、バインドされていない列の値は自動的に保持されません。DataGridViewWhen a DataGridView control containing both bound and unbound columns is sorted, the values in the unbound columns cannot be maintained automatically. これらの値を維持VirtualModeするには、プロパティをにtrue設定し、イベントCellValueNeededCellValuePushedイベントを処理することによって、仮想モードを実装する必要があります。To maintain these values, you must implement virtual mode by setting the VirtualMode property to true and handling the CellValueNeeded and CellValuePushed events. 詳細については、「方法 :Windows フォーム DataGridView コントロールで仮想モードを実装します。For more information, see How to: Implement Virtual Mode in the Windows Forms DataGridView Control. バインドモードでの非バインド列による並べ替えはサポートされていません。Sorting by unbound columns in bound mode is not supported.

プログラムによる並べ替えProgrammatic Sorting

メソッドSortを呼び出すDataGridViewことによって、プログラムでを並べ替えることができます。You can sort a DataGridView programmatically by calling its Sort method.

メソッドのオーバーロードはSort(DataGridViewColumn,ListSortDirection) 、パラメーターとDataGridViewColumnしてと列挙値を受け取ります。ListSortDirection SortThe Sort(DataGridViewColumn,ListSortDirection) overload of the Sort method takes a DataGridViewColumn and a ListSortDirection enumeration value as parameters. このオーバーロードは、意味のある順序を指定できるが、自動並べ替えを構成しない値を持つ列で並べ替える場合に便利です。This overload is useful when sorting by columns with values that can be meaningfully ordered, but which you do not want to configure for automatic sorting. このオーバーロードを呼び出しSortMode 、プロパティ値がのDataGridViewColumnSortMode.Automatic列を渡すと、 SortedColumnプロパティとSortOrderプロパティが自動的に設定され、適切な並べ替えグリフが列ヘッダーに表示されます。When you call this overload and pass in a column with a SortMode property value of DataGridViewColumnSortMode.Automatic, the SortedColumn and SortOrder properties are set automatically and the appropriate sorting glyph appears in the column header.

注意

プロパティを設定して、 Sort(DataGridViewColumn,ListSortDirection) コントロールが外部データソースにバインドされている場合、バインドされていない列に対してはメソッドオーバーロードは機能しません。DataGridView DataSourceWhen the DataGridView control is bound to an external data source by setting the DataSource property, the Sort(DataGridViewColumn,ListSortDirection) method overload does not work for unbound columns. また、 VirtualModeプロパティがtrueの場合は、バインドされた列に対してのみこのオーバーロードを呼び出すことができます。Additionally, when the VirtualMode property is true, you can call this overload only for bound columns. 列がデータバインドされてIsDataBoundいるかどうかを判断するには、プロパティ値を確認します。To determine whether a column is data-bound, check the IsDataBound property value. バインドモードでの非バインド列の並べ替えはサポートされていません。Sorting unbound columns in bound mode is not supported.

カスタム並べ替えCustom Sorting

をカスタマイズDataGridViewするには、 Sort(IComparer) Sortメソッドのオーバーロードを使用するか、 SortCompareイベントを処理します。You can customize DataGridView by using the Sort(IComparer) overload of the Sort method or by handling the SortCompare event.

メソッドSort(IComparer)オーバーロードは、インターフェイスをIComparer実装するクラスのインスタンスをパラメーターとして受け取ります。The Sort(IComparer) method overload takes an instance of a class that implements the IComparer interface as a parameter. このオーバーロードは、カスタムの並べ替えを提供する場合に便利です。たとえば、列の値に自然な並べ替え順序が設定されていない場合や、自然な並べ替え順序が適切でない場合などです。This overload is useful when you want to provide custom sorting; for example, when the values in a column do not have a natural sort order or when the natural sort order is inappropriate. この場合、自動並べ替えを使用することはできませんが、列ヘッダーをクリックしてユーザーが並べ替えられるようにすることもできます。In this case, you cannot use automatic sorting, but you might still want your users to sort by clicking the column headers. 列ヘッダーを選択に使用しない場合はColumnHeaderMouseClick 、イベントのハンドラーでこのオーバーロードを呼び出すことができます。You can call this overload in a handler for the ColumnHeaderMouseClick event if you do not use column headers for selection.

注意

メソッドSort(IComparer)オーバーロードは、 DataGridViewコントロールがVirtualMode外部データソースにバインドされておらず、プロパティ値がfalseの場合にのみ機能します。The Sort(IComparer) method overload works only when the DataGridView control is not bound to an external data source and the VirtualMode property value is false. 外部データソースにバインドされている列の並べ替えをカスタマイズするには、データソースによって提供される並べ替え操作を使用する必要があります。To customize sorting for columns bound to an external data source, you must use the sorting operations provided by the data source. 仮想モードでは、バインドされていない列に対して独自の並べ替え操作を提供する必要があります。In virtual mode, you must provide your own sorting operations for unbound columns.

Sort(IComparer)メソッドオーバーロードを使用するには、 IComparerインターフェイスを実装する独自のクラスを作成する必要があります。To use the Sort(IComparer) method overload, you must create your own class that implements the IComparer interface. このインターフェイスでIComparer.Compareは、メソッドのオーバーロードが呼び出されたときDataGridView Sort(IComparer)DataGridViewRowがオブジェクトを入力として渡すメソッドを実装するために、クラスが必要です。This interface requires your class to implement the IComparer.Compare method, to which the DataGridView passes DataGridViewRow objects as input when the Sort(IComparer) method overload is called. これにより、任意の列の値に基づいて、正しい行の順序を計算できます。With this, you can calculate the correct row ordering based on the values in any column.

メソッドのオーバーロードでは、 SortedColumn SortOrderプロパティとプロパティが設定されないため、並べ替えグリフを表示するようにプロパティを常に設定する必要があります。DataGridViewColumnHeaderCell.SortGlyphDirection Sort(IComparer)The Sort(IComparer) method overload does not set the SortedColumn and SortOrder properties, so you must always set the DataGridViewColumnHeaderCell.SortGlyphDirection property to display the sorting glyph.

メソッドオーバーロードのSort(IComparer)代わりに、 SortCompareイベントのハンドラーを実装することによって、カスタムの並べ替えを行うことができます。As an alternative to the Sort(IComparer) method overload, you can provide custom sorting by implementing a handler for the SortCompare event. このイベントは、自動並べ替えを行うように構成された列のヘッダーをユーザー Sort(DataGridViewColumn,ListSortDirection)がクリックしSortたとき、またはメソッドのオーバーロードを呼び出したときに発生します。This event occurs when users click the headers of columns configured for automatic sorting or when you call the Sort(DataGridViewColumn,ListSortDirection) overload of the Sort method. イベントは、コントロール内の行の各ペアに対して発生し、正しい順序を計算できるようにします。The event occurs for each pair of rows in the control, enabling you to calculate their correct order.

注意

プロパティが設定さSortCompareれている場合、trueまたはプロパティの値がの場合、イベントは発生しません。VirtualMode DataSourceThe SortCompare event does not occur when the DataSource property is set or when the VirtualMode property value is true.

関連項目See also