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.

DataGridViewColumnSortModeDataGridViewColumnSortMode 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. これらの列の場合、NotSortableSortMode プロパティ設定は、並べ替えに使用されないことを示します。そのため、並べ替えグリフのヘッダーに領域を予約する必要はありません。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.

DataGridView が並べ替えられている場合は、SortedColumn の値と SortOrder プロパティを確認することで、並べ替え列と並べ替え順序の両方を確認できます。When 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.

バインド列とバインドされていない列の両方を含む DataGridView コントロールが並べ替えられている場合、バインドされていない列の値は自動的に保持されません。When a DataGridView control containing both bound and unbound columns is sorted, the values in the unbound columns cannot be maintained automatically. これらの値を維持するには、VirtualMode プロパティを true に設定し、CellValueNeeded および CellValuePushed イベントを処理することによって、仮想モードを実装する必要があります。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 メソッドの Sort(DataGridViewColumn,ListSortDirection) オーバーロードは、DataGridViewColumnListSortDirection 列挙値をパラメーターとして受け取ります。The 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.

注意

DataSource プロパティを設定して、DataGridView コントロールが外部データソースにバインドされている場合、バインドされていない列に対しては Sort(DataGridViewColumn,ListSortDirection) メソッドオーバーロードは機能しません。When 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

Sort メソッドの Sort(IComparer) オーバーロードを使用するか、SortCompare イベントを処理することによって、DataGridView をカスタマイズできます。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 メソッドを実装する必要があります。このメソッドは、Sort(IComparer) メソッドのオーバーロードが呼び出されたときに、DataGridViewDataGridViewRow オブジェクトを入力として渡します。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.

Sort(IComparer) メソッドのオーバーロードでは SortedColumnSortOrder のプロパティが設定されないため、並べ替えグリフを表示するには、常に DataGridViewColumnHeaderCell.SortGlyphDirection プロパティを設定する必要があります。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 メソッドの Sort(DataGridViewColumn,ListSortDirection) のオーバーロードを呼び出したときに発生します。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.

注意

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

参照See also