DataGridView.Sort メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
DataGridView コントロールの内容を並べ替えます。
オーバーロード
Sort(IComparer) |
IComparer インターフェイスの実装を使用して、DataGridView コントロールの内容を並べ替えます。 |
Sort(DataGridViewColumn, ListSortDirection) |
指定された列の内容に基づいて、DataGridView コントロールの内容を昇順または降順で並べ替えます。 |
Sort(IComparer)
IComparer インターフェイスの実装を使用して、DataGridView コントロールの内容を並べ替えます。
public:
virtual void Sort(System::Collections::IComparer ^ comparer);
public virtual void Sort (System.Collections.IComparer comparer);
abstract member Sort : System.Collections.IComparer -> unit
override this.Sort : System.Collections.IComparer -> unit
Public Overridable Sub Sort (comparer As IComparer)
パラメーター
例外
comparer
が null
です。
例
次のコード例では、複数列の並べ替えシナリオで メソッド オーバーロードを使用 Sort する方法を示します。 この例では、 IComparer インターフェイスが クラスに RowComparer
実装されています。
private void Button1_Click( object sender, EventArgs e )
{
if ( RadioButton1.Checked == true )
{
DataGridView1.Sort( new RowComparer( SortOrder.Ascending ) );
}
else if ( RadioButton2.Checked == true )
{
DataGridView1.Sort( new RowComparer( SortOrder.Descending ) );
}
}
private class RowComparer : System.Collections.IComparer
{
private static int sortOrderModifier = 1;
public RowComparer(SortOrder sortOrder)
{
if (sortOrder == SortOrder.Descending)
{
sortOrderModifier = -1;
}
else if (sortOrder == SortOrder.Ascending)
{
sortOrderModifier = 1;
}
}
public int Compare(object x, object y)
{
DataGridViewRow DataGridViewRow1 = (DataGridViewRow)x;
DataGridViewRow DataGridViewRow2 = (DataGridViewRow)y;
// Try to sort based on the Last Name column.
int CompareResult = System.String.Compare(
DataGridViewRow1.Cells[1].Value.ToString(),
DataGridViewRow2.Cells[1].Value.ToString());
// If the Last Names are equal, sort based on the First Name.
if ( CompareResult == 0 )
{
CompareResult = System.String.Compare(
DataGridViewRow1.Cells[0].Value.ToString(),
DataGridViewRow2.Cells[0].Value.ToString());
}
return CompareResult * sortOrderModifier;
}
}
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) _
Handles Button1.Click
If RadioButton1.Checked = True Then
DataGridView1.Sort(New RowComparer(SortOrder.Ascending))
ElseIf RadioButton2.Checked = True Then
DataGridView1.Sort(New RowComparer(SortOrder.Descending))
End If
End Sub
Private Class RowComparer
Implements System.Collections.IComparer
Private sortOrderModifier As Integer = 1
Public Sub New(ByVal sortOrder As SortOrder)
If sortOrder = sortOrder.Descending Then
sortOrderModifier = -1
ElseIf sortOrder = sortOrder.Ascending Then
sortOrderModifier = 1
End If
End Sub
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
Implements System.Collections.IComparer.Compare
Dim DataGridViewRow1 As DataGridViewRow = CType(x, DataGridViewRow)
Dim DataGridViewRow2 As DataGridViewRow = CType(y, DataGridViewRow)
' Try to sort based on the Last Name column.
Dim CompareResult As Integer = System.String.Compare( _
DataGridViewRow1.Cells(1).Value.ToString(), _
DataGridViewRow2.Cells(1).Value.ToString())
' If the Last Names are equal, sort based on the First Name.
If CompareResult = 0 Then
CompareResult = System.String.Compare( _
DataGridViewRow1.Cells(0).Value.ToString(), _
DataGridViewRow2.Cells(0).Value.ToString())
End If
Return CompareResult * sortOrderModifier
End Function
End Class
注釈
このメソッドを使用すると、 クラスの並べ替え機能を高度に DataGridView カスタマイズできます。 高度にカスタマイズされた並べ替え操作を実装するために、イベントのイベント ハンドラーを記述し、インターフェイスを ColumnHeaderMouseClick パラメーターとして実装するクラスのインスタンスを使用してこのメソッドを System.Collections.IComparer 呼び出すことができます。 この場合、通常、 プロパティを DataGridViewColumn.SortMode に DataGridViewColumnSortMode.Programmatic 設定して、自動並べ替えを無効にし、並べ替えグリフの空きを残します。 プログラムによる並べ替えモードに設定された列で並べ替える場合は、 プロパティを設定して並べ替えグリフを自分で表示する DataGridViewColumnHeaderCell.SortGlyphDirection 必要があります。
このメソッドは、 プロパティが DataSource 設定されていない場合にのみ機能します。 コントロールを DataGridView 外部データ ソースにバインドする場合は、そのデータ ソースによって提供される並べ替え操作を使用する必要があります。 仮想モードを実装して独自のデータ ソースを提供する場合は、並べ替え操作も自分で処理する必要があります。
このメソッドを呼び出すと、 プロパティが CurrentCell に自動的に null
設定されます。
こちらもご覧ください
適用対象
Sort(DataGridViewColumn, ListSortDirection)
指定された列の内容に基づいて、DataGridView コントロールの内容を昇順または降順で並べ替えます。
public:
virtual void Sort(System::Windows::Forms::DataGridViewColumn ^ dataGridViewColumn, System::ComponentModel::ListSortDirection direction);
public virtual void Sort (System.Windows.Forms.DataGridViewColumn dataGridViewColumn, System.ComponentModel.ListSortDirection direction);
abstract member Sort : System.Windows.Forms.DataGridViewColumn * System.ComponentModel.ListSortDirection -> unit
override this.Sort : System.Windows.Forms.DataGridViewColumn * System.ComponentModel.ListSortDirection -> unit
Public Overridable Sub Sort (dataGridViewColumn As DataGridViewColumn, direction As ListSortDirection)
パラメーター
- dataGridViewColumn
- DataGridViewColumn
DataGridView の内容を並べ替えるキーとなる列。
- direction
- ListSortDirection
ListSortDirection 値のいずれか 1 つ。
例外
指定された列は、この DataGridView の一部ではありません。
- または -
DataSource プロパティが設定されていて、指定された列の IsDataBound プロパティが false
を返します。
dataGridViewColumn
が null
です。
VirtualMode プロパティが true
に設定されていて、指定された列の IsDataBound プロパティが false
を返します。
- または -
DataSource プロパティによって指定されたオブジェクトが IBindingList インターフェイスを実装していません。
- または -
DataSource プロパティによって指定されたオブジェクトには、false
の SupportsSorting プロパティ値が設定されていますす。
例
次のコード例は、プログラムによる並べ替えで を Sort 使用する方法を示しています。
private void sortButton_Click(object sender, System.EventArgs e)
{
// Check which column is selected, otherwise set NewColumn to null.
DataGridViewColumn newColumn =
dataGridView1.Columns.GetColumnCount(
DataGridViewElementStates.Selected) == 1 ?
dataGridView1.SelectedColumns[0] : null;
DataGridViewColumn oldColumn = dataGridView1.SortedColumn;
ListSortDirection direction;
// If oldColumn is null, then the DataGridView is not currently sorted.
if (oldColumn != null)
{
// Sort the same column again, reversing the SortOrder.
if (oldColumn == newColumn &&
dataGridView1.SortOrder == SortOrder.Ascending)
{
direction = ListSortDirection.Descending;
}
else
{
// Sort a new column and remove the old SortGlyph.
direction = ListSortDirection.Ascending;
oldColumn.HeaderCell.SortGlyphDirection = SortOrder.None;
}
}
else
{
direction = ListSortDirection.Ascending;
}
// If no column has been selected, display an error dialog box.
if (newColumn == null)
{
MessageBox.Show("Select a single column and try again.",
"Error: Invalid Selection", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
else
{
dataGridView1.Sort(newColumn, direction);
newColumn.HeaderCell.SortGlyphDirection =
direction == ListSortDirection.Ascending ?
SortOrder.Ascending : SortOrder.Descending;
}
}
Private Sub SortButton_Click(ByVal sender As Object, _
ByVal e As EventArgs) Handles sortButton.Click
' Check which column is selected, otherwise set NewColumn to Nothing.
Dim newColumn As DataGridViewColumn
If dataGridView1.Columns.GetColumnCount(DataGridViewElementStates _
.Selected) = 1 Then
newColumn = dataGridView1.SelectedColumns(0)
Else
newColumn = Nothing
End If
Dim oldColumn As DataGridViewColumn = dataGridView1.SortedColumn
Dim direction As ListSortDirection
' If oldColumn is null, then the DataGridView is not currently sorted.
If oldColumn IsNot Nothing Then
' Sort the same column again, reversing the SortOrder.
If oldColumn Is newColumn AndAlso dataGridView1.SortOrder = _
SortOrder.Ascending Then
direction = ListSortDirection.Descending
Else
' Sort a new column and remove the old SortGlyph.
direction = ListSortDirection.Ascending
oldColumn.HeaderCell.SortGlyphDirection = SortOrder.None
End If
Else
direction = ListSortDirection.Ascending
End If
' If no column has been selected, display an error dialog box.
If newColumn Is Nothing Then
MessageBox.Show("Select a single column and try again.", _
"Error: Invalid Selection", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
Else
dataGridView1.Sort(newColumn, direction)
If direction = ListSortDirection.Ascending Then
newColumn.HeaderCell.SortGlyphDirection = SortOrder.Ascending
Else
newColumn.HeaderCell.SortGlyphDirection = SortOrder.Descending
End If
End If
End Sub
注釈
このメソッドは、指定した列の値を比較して、 の DataGridView 内容を並べ替えます。 既定では、並べ替え操作では、 メソッドを Compare 使用して、 プロパティを使用して列内のセルのペアを DataGridViewCell.Value 比較します。
プロパティが にDataGridViewColumnSortMode.Automatic設定されている列のSortMode場合、 SortedColumn プロパティと SortOrder プロパティは自動的に設定され、適切な並べ替えグリフが表示されます。 プロパティが にDataGridViewColumnSortMode.Programmatic設定されている列のSortMode場合は、 プロパティを使用して並べ替えグリフを自分で表示するDataGridViewColumnHeaderCell.SortGlyphDirection必要があります。
イベントを処理することで、このメソッドで使用される並べ替え操作を SortCompare カスタマイズできます。 このイベントは、 プロパティが DataSource 設定されていない場合にのみ発生します。
プロパティが DataSource 設定されている場合、このメソッドはデータ バインド列に対してのみ機能します。 データ バインド列には、プロパティが DataGridViewColumn.DataPropertyName 設定されています。 これにより、 プロパティは DataGridViewColumn.IsDataBound を返します true
。
コントロールに DataGridView バインドされた列とバインドされていない列の両方が含まれている場合は、バインドされていない列でコントロールが並べ替えられるときに、バインドされていない列の値を維持する仮想モードを実装する必要があります。 これを行うには、 プロパティを にVirtualModetrue
設定し、イベントを処理しますCellValueNeeded。 列が編集可能な場合は、イベントも処理する CellValuePushed 必要があります。 仮想モードの詳細については、「方法: Windows フォーム DataGridView コントロールで仮想モードを実装する」を参照してください。 コントロールがデータ バインドされている場合の非連結列による並べ替えはサポートされていません。
こちらもご覧ください
適用対象
.NET